golang包管理的基本操作

 

学习一门语言当然是要从基本语法,常用的生态逐步深入,开发一个项目也是如此。golang作为后端开发的主流语言,目前国内的大小厂都过渡和启用新的项目选用这个语言来做开发,从前不理解程序设计,从c开始的程序设计接触,到现在的高级语言。golang作为灵活,简单,易用的典范,我们来说说,开发一个golang服务所要做的事情:

第一步:初始化

在安装好golang的开发sdk之后,在你的安装目录会有pkg、src、bin三个通用目录。

pkg作为包管理目录,通过go mod下载的包会在pkg/mod目录下,例如github.com/xx/xx,对应的路径为pkg/mod/github.com/xx/xx,如果是用golang ide开发我们可以通过External Libraries查看我们项目当中引入的关联modules

src目录就是当前的代码工作路径,这里go有几个关键的全局变量需要注意的,GOPATH:go的工作目录,我们创建项目,管理项目的一些日常操作发生的地方;GOROOT:go的安装路径,我们需要下载和安装go的sdk来为我们提供编译、运行和开发功能;GOARCH:目标处理器架,由于cpu不同的芯片架构,所以一份go代码要在不同的平台运行需要编译程对应的二进制安装包;GOBIN:程序生成的可执行文件的路径,这个可以设置也可以不设置,默认是GOPATH/bin目录下

bin就是我们常用的系统go命令存放地方,例如你用到了protobuf,需要下载编译安装对应的包,并把这个目录加入到系统path路径中,当然自己用go写的工具也可以通过go install安装到这个目录

第二步:引用

正式开发一个go的应用程序,首先,创建一个目录,起名为ser1,那么开始定义个一个程序入口文件,main.go。

package main

import "fmt"

func main(){
    fmt.println("I am golang")
}

如果只是简单的一个go文件,那么没有必要定义一个包,所谓modules,是为其他程序提供一段手脚架,中间件,扩展,sdk,工具,甚至完整功能的套件,模块。这是一个通用的概念,在golang中,Go Modules是版本化的,并且某些版本具有某些特殊性。

这里的可以说go mod就是代码特性管理,通过go mod init xxx 开始,初始化,这时候,项目会多出一个叫go.mod的文件,紧接着go mod tidy引入我们项目当中用到的包,模块。在go1.16有时候需要注意的是go mod tidy并没有去下载我们需要的包,这时候需要用到go mod download在自动下载所有关联包,而单独下载一个包可以通过go mod download xx/xxx 这样解决,或者go get 下载,否则你的项目将不可运行。

第三步:发布

我们的代码发布一般都会按照版号发布,而go.mod 文件中正是通过对引入的包进行管理,这一点和package.json类似。

require(
    xxxx v0.0.0
)

通过go mod tidy下载到的包会,自动下载这个modules下最新的version,除非指定版本号。

如果这时候想要用其他的版本可通过replace修改xxx包=>xxx v0.0.1 会将对应的包版本作为项目开发版本

而,go.sum中包含了我们使用和历史使用的包版本,而当我们发布项目,别人通过go mod tidy或者go mod download下载对应的依赖,而如果对应的依赖hash值不和我们go.sum中的哈希值不一致时,会报go mod checksum mismatch错误。此时,建议的做法是删除go.sum文件,删除缓存,通过go clean -modcache命令。然后再重新下载项目中,我们也常常自定义一些公共基础组件,基础包作为公司和个人项目的私有项目。这时候需要这样设置:

go env -w GOPRIVATE=github.com/repoURL/private-repo

这里有个好处是不必发布公开modules即可正常使用。

由于,我们使用的第三方库,或者sdk等版本的问题,导致我们在开发过程中,经常碰到各种奇葩的报错,这时候环境的一致性就非常重要,因为不同版本的代码都是不一样的,而这时候,问题的解决版本是,根据报错的异常,查看问题所在。或者回到正常的地方再来一遍类似万能的重起。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值