Go 包依赖管理工具 —— govendor

govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具。与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本、以及无相互侵入的开发和管理。

vendor 特性

最开始的时候,Go 并没有提供较为妥当的包管理工具。从 1.5 版本开始提供了 vendor 特性,但需要手动设置环境变量 GO15VENDOREXPERIMENT=1

在执行 go buildgo run 命令时,会按照以下顺序去查找包:

  • 当前包下的 vendor 目录
  • 向上级目录查找,直到找到 src 下的 vendor 目录
  • 在 GOROOT 目录下查找
  • 在 GOPATH 下面查找依赖包

在发布 1.6 版本时,该环境变量的值已经默认设置为 1 了,该值可以使用 go env 命令查看。

在发布 1.7 版本时,已去掉该环境变量,默认开启 vendor 特性。

搞懂 macOS 上的主机名/hostname/ComputerName

主机名/hostname/ComputerName 的含义

主机名、hostname 是一个东西,中英文而已,指的是你本地网络上的电脑可以通过主机名访问你的电脑。这个与 Linux 系统是一致的。

ComputerName,这个是 macOS 才有的东西。跟 Windows 上一样,表示的是电脑名称,给人看的。

可以从下图中看出来(系统偏好设置 > 共享):

-w668

对于 macOS 来说,它会按以下的顺序来确定主机名,直到获取到为止:

  • 从以下文件中读取:/etc/hostconfig
  • 从以下系统配置项读取:/Library/Preferences/SystemConfiguration/preferences.plist 中的 System ▸ System ▸ HostName
  • 由本机 IP 地址的反向 DNS 查询获取
  • 从以下系统配置项读取:/Library/Preferences/SystemConfiguration/preferences.plist 中的 System ▸ Network ▸ HostNames ▸ LocalHostName
  • 如果以上方法都没获取到,就为默认的 localhost

一键解决 go get golang.org/x 包失败

问题描述

当我们使用 go getgo installgo mod 等命令时,会自动下载相应的包或依赖包。但由于众所周知的原因,类似于 golang.org/x/... 的包会出现下载失败的情况。如下所示:

1
2
3
$ go get -u golang.org/x/sys

go get golang.org/x/sys: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

曾国藩语录

本文收集了曾文正公的经典语录,予己每日三省

曾国藩(1811年11月26日-1872年3月12日),初名子城,字伯涵,号涤生,宗圣曾子七十世孙。中国近代政治家、战略家、理学家、文学家,湘军的创立者和统帅。

在曾国藩的倡议下,建造了中国第一艘轮船,建立了第一所兵工学堂,印刷翻译了第一批西方书籍,安排了第一批赴美留学生。可以说曾国藩是中国近代化建设的开拓者。

曾国藩与胡林翼并称“曾胡”,与李鸿章、左宗棠、张之洞并称“晚清中兴四大名臣”。官至两江总督、直隶总督、武英殿大学士,封一等毅勇侯,谥号“文正”,后世称“曾文正”。有人推崇他为千古第一完人,但因忠于清室镇压太平天国暴乱又饱受争议。

  • 将来不迎,当下不杂,过往不念

  • 倚天照海花无数,流水高山心自知

  • 利可共而不可独,谋可寡而不可众;独利则败,众谋则泄

  • 久利之事勿为,中争之地无望

  • 惟正己可以化人,唯尽己可以服人

PHP 算法 —— 归并排序

算法原理

下列动图来自@五分钟学算法,演示了归并算法的原理和步骤。

merge

原理:

利用递归,先拆分、后合并、再排序。

步骤:

  • 均分数列为两个子数列
  • 递归重复上一步骤,直到子数列只有一个元素
  • 父数列合并两个子数列并排序,递归返回数列

lsyncd —— 多机器实时同步文件神器

lsyncd 是一个支持实时、双向、多机器的多模式文件同步工具。

使用 Lua 语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过 rsync 去差异同步,达到实时的效果。

安装

在源文件服务器上安装:

1
yum -y install lsyncd

更改 Linux 系统的用户名和主机名

可能系统安装时的默认用户名我们不喜欢,但已经在该用户上已经配置了很多东西,所以我们只能修改用户名、而非新建一个。

修改主机名

假设此处我们要修改的新主机名为 hello

  • 修改 hostname 文件

    1
    
    sudo vim /etc/hostname

    将内容改为 hello/etc/hostname 文件修改了需要重启才会生效。

  • 用 hostname 修改当前会话的主机名

    1
    
    hostname hello
  • 修改 hosts 文件

    1
    
    sudo vim /etc/hosts

    将内容修改为类似如下:

    1
    2
    
    127.0.0.1 localhost
    127.0.0.1 hello

Linux 命令 —— scp 远程文件拷贝

scp 是 secure copy 的缩写,scp 是 Linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。Linux 的 scp 命令可以在 Linux 服务器之间复制文件和目录。

命令格式

1
2
3
4
5
scp [可选参数] file_source file_target

scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2

gops —— Go 程序诊断分析工具

GitHub: https://github.com/google/gops

一个用于列出和诊断分析系统中正在运行的 Go 程序的命令行工具

安装

1
go get -u github.com/google/gops

命令帮助

执行 gops help 查看帮助文档:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
gops is a tool to list and diagnose Go processes.

	gops <cmd> <pid|addr> ...
	gops <pid> # displays process info

Commands:
    stack       	Prints the stack trace.
    gc          	Runs the garbage collector and blocks until successful.
    setgc	        Sets the garbage collection target percentage.
    memstats    	Prints the allocation and garbage collection stats.
    version     	Prints the Go version used to build the program.
    stats       	Prints the vital runtime stats.
    help        	Prints this help text.

Profiling commands:
    trace       	Runs the runtime tracer for 5 secs and launches "go tool trace".
    pprof-heap  	Reads the heap profile and launches "go tool pprof".
    pprof-cpu   	Reads the CPU profile and launches "go tool pprof".


All commands require the agent running on the Go process.
Symbol "*" indicates the process runs the agent.