Go 函数式选项 在实例化一个含有多个字段的结构体时,往往会封装一个工厂函数,类似于 123456789101112131415// 用于示例,实际情况可能有更多的字端type T struct { A string B int C int D bool}func NewT(a string, b int, c int, d bool) *T { return &T& 2021-01-24 #Go
Goland 远程开发 最近准备写一个简单的容器管理工具,需要运行在 Linux 上。然而开发的机子是 MacBook,于是就想折腾一下自己的 goland,配置一下远程开发。 目标就是在本地编写的代码,一件部署到远程的服务器上并运行。 配置远程的服务器在进行开发之前,首先需要把远程的服务器给配置好。远程服务器的版本为 Ubuntu 20.04 ,准备使用的协议是 SFTP,所以需要在 ubuntu 20.04 上配置一 2020-12-28 #工具
docker 连接远程主机 介绍在某些情况下,需要工作的电脑上 docker CLI 连接到另一台主机上的 docker 服务器。记下具体的配置过程。 配置远程主机首先需要在远程主机上开启监听本地的端口, 修改 docker 的配置文件: 1vim /etc/docker/daemon.json 修改,或增减 hosts 字段 123456{ "hosts": [ "unix:// 2020-10-01 #container
DNS 概述Domain Name System(DNS) 是一个用于计算机,服务以及其他资源连接到 Iternet 的分布式分层系统。DNS 是一个数据库,它保存了域名以及 IP 地址的映射。可以将域名转化成对应的 IP。 用户与互联网上的某台机器进行交互时,需要知道对方机器的 IP 地址,不论是 32 位还是点十分制的 IP 地址都不容易记忆,因此需要有一个容易记住的主机名称(域名),并且有一个对映的 2020-09-07 #Network
cgo 内存释放 介绍使用 cgo,Go 可以与 C 语言代码进行交互,但是在使用过程中,如果使用的姿势不对,那么就有可能带来内存泄漏问题。 Go 自带 GC,一般情况下不会发生内存泄漏事件,自带的 GC 会收集不再使用的对象,并将其释放。但是在使用 cgo 时,某些函数会将 C 语言对象分配到 C 的堆上,在 Go 中初始化的 C 对象,是需要显示的调用 C.free() 去释放。官方文档也写明了这一点。在 cg 2020-05-17 #Go
Python map, filter, reduce 函数的注意事项 介绍 注意:本文所说的 python 都是指 python3,python2 已不再被支持 :) map(), filter() 以及 reduce() 是 Python 中与函数式编程相关的三个函数,可以对可迭代序列做映射,过滤以及累积。熟练使用这三个函数可以提升编码速度,并且感受到函数式编程的一些思想。但是在使用过程中需要注意一些事项 TL;DR from functools import 2020-05-06 #Python
Shell Tips 💡 一些关于 shell 的笔记 权限判断在执行脚本时,确定当前的权限是否为 root 代码: 1234if [ "$EUID" -ne 0 ] then echo "not root" exitfi EUID, 用于系统决定用户对系统资源的访问权限,等于 0 时表示权限为 root。 路径判断判断一个文件夹是否存在 代码: 123if [ -d &quo 2020-02-27 #shell
词法分析 介绍在之前的文章中,了解了什么是语言处理器,具体见这里。接下来就是详细了解一下编译器的结构。 整体来看,一个编译器分为前端以及后端两个部分。 前端也就是分析部分,在这个阶段,编译器会将源程序分解成多个组成要素,然后在这些要素上加上语法结构,之后就会利用这个语法结构去创建程序的中间表示。 分析会对程序的语法,语义进行分析,如果存在不一致的情况,编译器就会返回相应的信息。与此同时,分析部分会搜集程序的 2020-01-16 #编译原理
Go 的一种并发模式:管道 Go 管道模式开始这片文章是看完 Golang 官方博客后写下,记录下。原文在这里 首先是 What is pipeline?官方博客上将管道看作是并发的程序的一种。一系列的 stage 通过 channel 串联起来。其中,每个 stage 都是一组执行相同任务的 goroutine。在每个 Stage 中,每个 goroutine 都会做三件事情: 通过一个 channel 接收到要处理的上 2020-01-09 #Go
编译原理学习 语言处理器语言处理器就像是一个加工车间,某种程序设计语言编写的程序经过它的加工处理后,变成计算机可以执行的形式。语言处理器通常分为两种常见的形式,一是编译器,二是解释器。 编译器(Compiler)就像是一个翻译员,他将自己阅读到的程序,翻译成一个等价的,用另一种语言编写的程序。在这个过程中,他所阅读到的程序称之为 源语言,翻译成的语言称为 目标语言。整个过程如下: 源程序 -> [编译器 2020-01-06 #编译原理