七叶笔记 » golang编程 » 在 GitHub 上构建一个看上去正规的 Golang 项目

在 GitHub 上构建一个看上去正规的 Golang 项目

前言

接触 golang 时间很长,但是真正动手开始写 golang 也就是在最近。虽然写的不多,但是见过的 golang 项目可是不计其数,从 Kubernetes 和 istio 到亲身参与的 kustomize 再到 Kubernetes 生态圈的众多小工具,比如: kubeval 、 kubedog 等。从项目使用者和贡献者的角度接触了各种形形色色的 golang 项目。作为一个开发人员,在享受各种开源项目带来便利的同时,也希望自己动手开发一个 golang 项目。以我阅项目无数的经验,那么肯定要构建一个看上去正规的 GitHub 项目。

GoLand 设置

Go 开发环境 的安装网上教程很多,这里就不做介绍了。这里主要介绍一下在 GoLand 上开发环境的设置,这里的设置主要在 MacOS 上进行,其他系统可能有所不同。

使用Goland IDE vgo

vgo 是基于 Go Module 规范的包管理工具,同官方的 go mod 命令工具类似。

· 开启 vgo,GoLand->Preferences->GO->Go Modules(vgo)

· 手动修改 go.mod

其中 latest 为最新版本,GoLand 会去下载最新依赖代码,下载成功后会修改 go.mod 并且生成 go.sum 依赖分析文件。

module github.com/sunny0826/hamal
go 1.12
require (
 github.com/mitchellh/go-homedir latest
 github.com/spf13/cobra latest
 github.com/spf13/viper latest
)
 

· 更新成功

在更新成功后,会生成 go.sum 文件并修改 go.mod 文件。

module github.com/sunny0826/hamal
go 1.12
require (
 github.com/mitchellh/go-homedir v1.1.0
 github.com/spf13/cobra v0.0.5
 github.com/spf13/viper v1.4.0
)
 

· 使用快捷键 ⌥(option)+↩(return) 或者点击鼠标右键, 选择 Sync packages of github.com/sunny0826/hamal在 import 处导入依赖。

配置代理

如果要选出 golang 最劝退一个原因,那么依赖下载难肯定得票最高!这个时候一个合适的梯子就很重要了,如果没有这个梯子,上面的这步就完全无法完成。这里主要介绍 GoLand 上的配置,Shadowsocks 的安装和配置就不做介绍了。

GoLand->Preferences->Appearance & Behavior->System Settings->HTTP Proxy 这里设置好之后,别忘了点击 Check connection 测试一下梯子搭成没有。

配置 go fmt goimports golangci-lint

这三个工具都是 GoLand 自带的,设置起来十分简单:GoLand->Preferences->Tools->File Watchers,点击添加即可。之后在写完代码之后就会自动触发这3个工具的自动检测,工具作用:

· go fmt : 统一的代码格式化工具。

· golangci-lint : 静态代码质量检测工具,用于包的质量分析。

· goimports : 自动 import 依赖包工具。

安装配置 golint

GoLand 没有自带 golint 工具,需要手动安装:

mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git clone 
git clone 
cd $GOPATH/src/golang.org/x/lint/golint
go install
 

安装成功之后将会在 $GOPATH/bin 目录下看到自动生成了 golint 二进制工具文件。

GoLand 配置 golint,修改 Name, Program, Arguments 三项配置,其中 Arguments 需要加上 -set_exit_status参数,如图所示:

Travis CI 持续集成

在 Github 上装逼怎么能少的了 Travis CI ,直接登录 Travis CI,使用 GitHub 登录,然后选择需要使用 Travis CI 的项目,在项目根目录添加 .travis.yml ,内容如下:

language: go
go:
 - 1.12.5
sudo: required
install:
 - echo "install"
 script :
 - echo "script"
 

这里只是一个示例,在每次 push 代码之后,都会触发 CI,具体语法可以参看官方文档。

重点: 你以为使用 Travis CI 就是为了持续集成吗?那就太天真了!使用 Travis CI 当然为了他的 Badges ,将 RESULT 拷贝到你的 README.md 里面就好了。

GO Report Card

__又一重点__:我们在 GoLand 上安装了 golint 等工具进行代码质量检测,在撸码的时候就能进行代码检查,那么这个就是为了纯装逼了。GO Report Card 是一个 golang 代码检测网站,你只需把 Github 地址填上去即可。获取 Badges 的方法和 Travis CI 类似,将 MarkDown 中的内容拷贝到 RERADME.md 中就好。

GoReleaser

持续集成有了,代码检查也有了,再下面就是怎么发布一个漂亮的 release 了。如果还在手动发布 release ,那么就又掉 low 了。使用 GoReleaser 一行命令来发布一个漂亮的 release 吧。

由于使用的的 MacOS ,这里使用 brew 来安装:

brew install goreleaser
 

在项目根目录生成 .goreleaser.yml 配置:

goreleaser init
 

配置好了以后要记得往 .gitignore 加上 dist,因为 goreleaser 会默认把编译编译好的文件输出到 dist 目录中。

goreleaser 配置好后,可以先编译测试一下:

goreleaser --skip-validate --skip-publish --snapshot
 

注意: 首次使用 goreleaser 要配置 GITHUB_TOKEN ,可以在这里申请,申请好之后运行下面的命令配置GITHUB_TOKEN

export GITHUB_TOKEN=<YOUR_TOKEN>
 

确保没有问题,那么就可以操作 git 和 goreleaser 来发布 release 了。

git add .
git commit -m "add goreleaser"
git tag -a v0.0.3 -m "First release"
git push origin master
git push origin v0.0.3
 

全部搞定后,一行命令起飞:

goreleaser
 

goreleaser 配合 CI 食用,效果更佳,这里就不做介绍了。

Badges 展示神器

这里介绍一个展示 Badges 的神器: 。这个网站提供各种各样的 Badges ,如果你愿意,完全可以把你的 GitHub README.md 填满,有兴趣的同学可以自取。

稿件来源:阿里云开发者社区(点击下面“了解更多”)

相关文章