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

简介: 接触 golang 时间很长,但是真正动手开始写 golang 也就是在最近。跟着我在 GitHub 上构建一个看上去正规的 Golang 项目。

前言

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

GoLand 设置

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

使用Goland IDE vgo

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

  1. 开启 vgoGoLand->Preferences->GO->Go Modules(vgo)
    image.png
  1. 手动修改 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
    )
  2. 更新成功

    在更新成功后,会生成 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
    )
    
  3. 使用快捷键 ⌥(option)+↩(return) 或者点击鼠标右键, 选择 Sync packages of github.com/sunny0826/hamal 在 import 处导入依赖。

配置代理

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

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

配置 go fmtgoimportsgolangci-lint

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

  • go fmt : 统一的代码格式化工具。
  • golangci-lint : 静态代码质量检测工具,用于包的质量分析。
  • goimports : 自动 import 依赖包工具。

image.png

安装配置 golint

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

mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git clone https://github.com/golang/lint.git
git clone https://github.com/golang/tools.git
cd $GOPATH/src/golang.org/x/lint/golint
go install

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

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

image.png

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 里面就好了。

image.png

GO Report Card

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

image.png

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 食用,效果更佳,这里就不做介绍了。
image.png

Badges 展示神器

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

后记

到这里可以在 GitHub 上装逼的 golang 配置已经介绍的差不多了,其实还有 CodecovCircleCI 等工具,这里就不做介绍了。这里要介绍的是我们的第一个 golang 项目 Hamal,该项目是一个命令行工具,用来在不同的镜像仓库之间同步镜像。由于我司推行混合云,使用了阿里云与华为云,而在阿里云或华为云环境互相推镜像的时候时间都比较长,所以开发这个小工具用于在办公网络镜像同步,同时也可以用来将我在 dockerhub 上托管的镜像同步到我们的私有仓库,欢迎拍砖。

目录
相关文章
|
2月前
|
JSON Kubernetes 安全
找到啦,我们已上车,Github 27000+ star,研发团队必备开源工具项目,真丝滑!!!
Trivy 是一款高效灵活的开源安全扫描工具,支持容器镜像、文件系统、Kubernetes 等多目标扫描,具备快速、易用、集成性强等特点,适用于 DevSecOps 全流程安全检测。
114 0
|
25天前
|
人工智能 JavaScript 前端开发
Github 2024-10-28 开源项目周报 Top15
本周GitHub热门项目涵盖Svelte、Open Interpreter、PowerShell等,涉及Web开发、AI助手、自动化工具等领域,Python、JavaScript为主流语言,展现开源技术活跃生态。(239字)
332 19
|
25天前
|
人工智能 JavaScript 前端开发
Github 2024-11-04 开源项目周报 Top14
本周GitHub热门项目涵盖屏幕截图转代码、网页监控、低代码开发等。Python与TypeScript主导,亮点项目包括AI生成代码工具、开源社交应用Bluesky及机器人框架LeRobot,展现AI与自动化技术的快速发展趋势。
129 15
|
25天前
|
人工智能 JavaScript Docker
Github 2024-11-11 开源项目周报 Top15
本周GitHub热门项目涵盖多领域:Python与TypeScript领跑,包括屏幕截图转代码、本地文件共享、PDF处理、AI开发代理等。亮点项目如screenshot-to-code、LocalSend、OpenHands及Diagrams,兼具创新与实用性,广受开发者关注。
120 13
|
25天前
|
人工智能 算法 JavaScript
Github 2024-10-14 开源项目周报 Top14
本周GitHub热门项目共14个,Python项目占7席。涵盖算法实现、生成式AI、金融分析、目标检测等领域,包括TheAlgorithms系列、OpenBB金融平台、Ultralytics YOLO11、Manim动画框架等,展现开源技术多元发展态势。
84 8
|
25天前
|
人工智能 Rust JavaScript
Github 2024-10-07 开源项目周报 Top15
本周GitHub热门项目共15个,Python项目占比最高达7个。榜首为Python算法实现集合TheAlgorithms/Python,Star数超17万;其他亮点包括Godot游戏引擎、OpenBB金融平台、ToolJet低代码框架及新兴AI相关项目如Crawl4AI、Llama Stack等,涵盖游戏、金融、AI、理财等多个领域。
68 4
|
25天前
|
人工智能 Rust 算法
Github 2024-09-30 开源项目周报 Top15
本周GitHub热门项目揭晓:Python主导,AutoGPT居首,涵盖AI、编程、数学动画等领域,助力开发者探索前沿技术。
106 4
|
25天前
|
人工智能 JavaScript 前端开发
Github 2024-09-16 开源项目周报 Top14
本周GitHub热门项目涵盖Python、TypeScript、Go等语言,React居首。亮点包括微软PowerToys、Node版本管理器、AI证件照工具HivisionIDPhotos及端侧大模型MiniCPM等。
83 2
|
25天前
|
Rust JavaScript 安全
Github 2024-09-02 开源项目周报 Top13
本周GitHub热门项目涵盖AI、开发工具与开源替代品。包括Notion替代AppFlowy、Airtable替代NocoDB、云平台Coolify及可观察性平台OpenObserve等,涉及Python、TypeScript、Rust等语言,聚焦效率、隐私与自动化。
87 1
|
2月前
|
人工智能 编解码 JSON
不看后悔!GitHub 开源 MultiTalk .8k star 强大的人语音+图像绑定项目
MultiTalk 是 GitHub 上的开源项目,具备音频驱动、多人对话视频生成功能。支持多路音频与图像绑定,实现高同步唇动与角色互动,适用于教学、虚拟人及短视频创作,已获 8k 星标。
217 0

热门文章

最新文章

推荐镜像

更多