折腾 Ubuntu 20.04 LTS 开发环境

前段时间买了个 Inter NUC (NUC10i5FNH6), 主要用来在家里搬砖。体验了一段时间 win10, 虽然配置了 WSL2, 但开发体验实在糟糕,在考虑过 Ubuntu 和黑苹果后,还是选择了 Ubuntu, 毕竟用习惯了白苹果,突然用个黑苹果,不能随意升级,还有接一个 USB WiFi ,还担心驱动问题。。。 NUC 用了一段时间,还是有点卡,CPU跟不上。 最后还是组装了一台台式主机,将原来的系统盘查上去直接就可使用,爽到飞起。 至于NUC就当服务器用了。 毕竟头一次想把 Ubuntu 当作生产力,记录一下折腾过程。 ...

2020-08-28  ·  家庭网络折腾  ·  ubuntu windows golang

Go学习笔记(九) 计时器的生命周期[译]

全文基于GO 1.14 计时器在定时执行一些任务时很有用。Go内部依靠调度器来管理创建的计时器。而Go的调度程序是协作式的调度方式,这会让整个调度看起来比较复杂,因为goroutune必须自己停止(依赖channel阻塞或system call), 或者由调度器自己在某个调度点暂停。 ...

2020-08-15  ·  Go学习笔记  ·  golang timer

利用 git hook 规范你的代码与 commit message

在团队协作时,由于个人编码习惯的差异,导致代码格式,风格都会有所不同,这就给代码审核带来一定的困难,更严重的是会导致整体的代码质量不可控。这时,我们有必要借助一些工具来约束我们的代码格式。在Go中,我们经常使用的工具有: goimports: 自动导包; gofmt : 格式化我们的代码; golint: 检查代码命名,注释等; go vet: 静态错误检查。 那么,我们可以利用这些工具来规范团队的代码风格。但如果每次手动执行这些命令,或者仅仅依靠IDE去检查,这是不靠谱的,因为人的行为本身是不靠谱的==。 于是,我们可以结合git hook, 强制执行这些检查,检查不通过,代码都无法提交,从而达到强一致性。 同时,结合上一篇«规范git commit message与自动化版本控制», 这里我们介绍一下利用pre-commit 约束commit-msg来约束我们的代码与git commit message。 ...

2020-04-13  ·  开发实战总结  ·  git hook golang

规范 git commit message 与自动化版本控制

git commit message是你对你所编码内容的总结概括。规范、详细的git commit message不仅能体现你的内容概括能力,还能为你自己和团队,或项目带来巨大的好处,这也是我所推崇的。但很多小伙伴不愿意花时间在这里,经常会写出优化了一些功能、修复了一些BUG等等模糊不清的commit message,完全没有意识到这么写会带来一些严重的问题: 管理者/其他项目参与者无法快速获取有用信息,判定修改内容,只有花大量时间阅读源码; 事后无法快速定位以前遇到的类似问题; 无法自动化版本控制,只有每次重新阅读代码,手动写一些详细的描述,用来发布新版或提交测试。 规范、详细的git commit message不仅能解决这些问题,还能带来更多的好处。 ...

2020-04-12  ·  开发实战总结  ·  git standard-version

超详细 vim 配置 (with MacVim)

MacVim 用了很久,非常喜欢 vim 编程带来的高效,清爽,hack 的感觉,感谢deepzz多年前的传道。这两天花了点时间一行一行的去查vimrc内的配置,大概弄清了每一项配置的作用,并标上注释,整理常用快捷键。 ...

2020-03-24  ·  开发实战总结 开发工具  ·  vim

Golang 中的 RESTful API 最佳实践

RESRful API已经流行很多年了,我也一直在使用它。最佳实践也看过不少,但当一个项目完成,再次回顾/梳理项目时,会发现很多API和规范还是多少有些出入。在这篇文章中,我们结合Go Web再次梳理一下RESTful API的相关最佳实践。 ...

2020-03-15  ·  Go学习笔记 Go实战  ·  restful api golang

折腾服务器(开篇) 我的第一台个人服务器

在对比过VPS,NUC,二手企业服务器,自己组装等方案后,决定还是选择后者。考虑到自己的需求并不要求多高性能(玩玩Gitlab、CI/CD、harbor、k8s、放一些工具、物联网终端等等),以及耗能低、安静,最主要总体价格要低等特点,最后选配如下: 配件 价格 备注 ASROCK/华擎科技J4105M集成主板+海盗船 2400 DDR4 8Gx2 ¥1099 CPU是4核1.50 GHz的(最高2.5),能耗10w 乔思伯 C2 台式机电脑机箱 ¥139 航嘉 冷静王钻石版 额定300W ¥179 如果不选这机箱,其实可以选个更小的电源 旧的固态 120G + 西数蓝盘 1T 0 蓝盘不知道能撑多久== 总体下来,1500大洋不到,比开一个vps便宜多了==。 话不多说,上图。 ​ 集成主板、内存条、硬盘 ​ 机箱、电源 最后,来一张电信悦me网关、Newifi3 和 装机后的全家福(装机过程略==)。 接下来就开始我的折腾之旅~。

2019-12-19  ·  家庭网络折腾 个人服务器  ·  服务器

Newifi3 实现低成本家庭级科学上网

为了搭建一个家庭智能科学上网的环境,想找个支持Openwrt的路由刷一刷, 观望了一段时间,入手了款矿渣newifi3 d2,虽说有人吐槽信号不好,然而房间小的我并不担心==。 ...

2019-09-01  ·  家庭网络折腾  ·  newifi3 homelab

Go学习笔记(八) | 使用 os/exec 执行命令

用Go去调用一些外部的命令其实很愉快的,这遍文章就总结一下我自己日常用的比较多的几种方法。 关于Unix标准输入输出 在具体聊os/exec的使用前,了解一下shell的标准输出是很有必要的。 我们平常会用到或看到这样的命令: $ ls xxx 1>out.txt 2>&1 $ nohup xxx 2>&1 & 你知道这里1,2含义么? 其实这里的1,2指的就是Unix文件描述符。文件描述符其实就一数字,每一个文件描述符代表的都是一个文件。如果你打开100个文件,你就会获取到100个文件描述符。 这里需要注意的一点就是,在Unix中一切皆文件。当然,这里我们不必去深究,我们需要知道的是1,2代表的是标准输出stdout与标准错误输出stderr。还有0代表标准输入stdin。 在os/exec中就用到了Stdin,Stdout,Stderr,这些基本Unix知识或能帮助我们更好理解这些参数。 os/exec os/exec包内容并不多,我们大概过一下。 LookPath(file string) (string, error) 寻找可执行文件路径,如果你指定的可执行文件在$PATH中,就会返回这个可执行文件的相对/绝对路径;如果你指定的是一个文件路径,他就是去判断文件是否可读取/执行,返回的是一样的路径。 在我们需要使用一些外部命令/可执行文件的时候,我们可以先使用该函数判断一下该命令/可执行文件是否有效。 Command(name string, arg …string) *Cmd 使用你输入的参数,返回Cmd指针,可用于执行Cmd的方法。 这里name就是我们的命令/可执行文件,后面的参数可以一个一个输入。 CommandContext(ctx context.Context, name string, arg …string) *Cmd 和上面功能一样,不过我们可以用上下文做一些超时等控制。 之后几个就是Cmd的一些方法。 (c *Cmd) CombinedOutput() ([]byte, error) 将标准输出,错误输出一起返回; (c *Cmd) Output() ([]byte, error) 输出标准输出,错误从error返回; (c *Cmd) Run() error 执行任务,等待执行完成; (c *Cmd) Start() error, (c *Cmd) Wait() error 前者执行任务,不等待完成,用后者等待,并释放资源; (c *Cmd) StderrPipe() (io....

2019-05-30  ·  Go学习笔记 Go基础  ·  golang

如何用 Go 调用 Windows API

有时候为了更好的兼容Windows, 或者我们为了获得更高级别功能的访问权限(如配置或创建JobObjects或安全令牌等),我们需要直接去调用Windows的系统API。 很幸运,我们可以利用syscall包与系统直接通信,不用用到CGO 。 然而,也有不方便的地方,如大多数的API,我们需要依赖不安全 (unsafe)的内存管理。 这篇文章,主要记录了我在平时开发过程中以及网上收集到的一些关于Windows API调用相关的知识,或者开发模式,方便你遇到类似的情况后,能更快入手。 ...

2019-05-22  ·  Go学习笔记  ·  golang