0%

0x744A7c03ec825A877FA1d0e5CBb90328176dFdDd

这是一个伟大的日子,我决定加入伟大的摸鱼人组织,成为一名合格的摸鱼人。

为了严谨记录这个伟大决议,特意加了数字签名

more: https://pkg.go.dev/cmd

go build

特别地,文件最上方加入 build tags 可以指定编译的平台

//go:build ≥ Go1.17

// +build ≤ Go1.16 时使用

//go:build ignore 表示编译时需要忽略

也可以采用文件名为 *_GOOS_GOARCH 的形式(source_windows_amd64.go)来限定文件制定的编译平台

go list

go list -m all 列出所有依赖

go list -m -u all 列出所有依赖以及其当前最新版本

go list -m -versions xx 列出xx包的所有版本

go get

go get -d xx 更新xx的版本

go get -d -u ./... 更新所有直接/简介依赖的modules的版本

go get -d xx@vx.x.x 更新某个包到指定版本

ps: Go1.18 默认隐式携带-d, 不会下载包,只会更新go.mod文件

go install

go install xx@version 下载某个program的指定版本

go mod

go mod tidy 删除go.mod中的无用包

go vet

go vet 找到文档中的错误之处,不一定十分准确

go fix

go tool fix -diff file 找到旧API并给出建议
如果没有 -diff 则直接替换文件,或路径下的所有文件

go get

Go1.17中, go get不加-d选项是不推荐的,-d的意思是只修改 go.mod 的内容而不会将包下载下来,这样可以避免下载耗时太长,也可以减少无用的包下载;Go1.18中,-d选项是默认的,也就是go get将无法用于下载包的编译文件
https://go.dev/doc/go-get-install-deprecation

Starting in Go 1.17, installing executables with go get is deprecated. go install may be used instead.
In Go 1.18, go get will no longer build packages; it will only be used to add, update, or remove dependencies in go.mod. Specifically, go get will always act as if the -d flag were enabled.

以前用go get xxx现在变成go install xxx@version

Lazy module loading

Go1.17的Go Command使用Module的懒加载模式Lazy module loading 来下载module。也就是如果go.mod的requires包涵盖了所有import packages,就不会加载module graph,否则再按需加载

go build标签

Go1.17及之后用来指定编译平台的标签是//go:build,新标签的语法与Go的逻辑语法相同,比如限定在linux或者OS X编译: //go:build linux || darwin
而在Go1.16及之前采用的标签是 // +build, 旧标签的语法为

  • 空格表示OR
  • 逗号表示AND
  • !表示NOT

比如限定只能在linux或者OS X编译: // +build linux darwin
gofmt命令可以在遇到旧标签的时候添加一个等价的新标签

Reference of Go Modules

Go Modules Reference https://go.dev/ref/mod
Go Modules Tutorial https://go.dev/blog/using-go-modules
Dependency Problem by Russ cox https://research.swtch.com/deps

note

go.mod中的go行指明了期望版本,编译器在遇到大于期望版本的新特性时会报错,比如要求

go 1.15

那么编译的代码中有Go1.16新特性//go:embed时会提示错误

尽量使得go.mod要求版本和实际编译版本一致

祝我生日快乐~

概述

迪克模型是用来描述工程师的技术能力的模型,由YYYMagic于2021年正式提出。

模型由T型模型发展而来,强调了对核心目标的关注,更适用于专家成长路线。并且能够满足工程师的长期目标管理需求,制定清晰的三年长期目标,在专注主要矛盾的同时关注次要矛盾。避免摇摆不定、模糊不清的问题。

迪克模型,如下图所示,由中心目标(center)以及分散目标(ball)组成,center是首要目标,需要深思熟虑来选定,比如你想在一年后成为优秀的XX工程师,那么这个XX就是center。ball是次要目标,分散在center的根部,可以是对center有一定支撑的领域,当然也可以是其他兴趣领域。选定首要次要目标之后,迪克模型的构建就完成了。

dic1

构建迪克模型的过程并不复杂,关键是需要按照模型不断学习充实自己,伴随工程能力的提升,center和ball也会变得越来越大。

实践

以音视频工程师为例,可以构造如下迪克模型

dic1

注意点

  1. 中心目标只能选定一个,但是可以有两个方面,比如”音视频“是核心目标,但是音视频又可以拆为”音视频技术“和”网络传输技术“两方面
  2. 虽然不被禁止,但应该避免加入两个以上的ball,该模型取法科学发展观,遵循了“一个中心,两个基本点“的发展理念,具有相当的科学性。加入两个以上的ball违背了专注中心的原则。