Golang 包相关问题

发布时间 2023-03-30 17:13:13作者: 始識

gopath、vendor、dep 、go module 的区别

  • gopath:要设置环境变量,然后执行执行 go install进行安装
  • vendor: 将第三方依赖完全和工程整合且本地化,构建项目速度快,但冗余度很高。很万能的方法
  • dep可以直接给引入的第三方包一个专门的目录,并且可以专门制定一个配置文件,控制go项目所引入的包,版本以及其他依赖关系。
  • go module:执行命令 go build && go mod tidy ,下载依赖并整理。

go get 下载过慢

经过测试,还是设置代理goproxy比较靠谱:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

go get 引包引不进去

其实在Go 1.13版本之后 越来越多的开源项目已经支持Go Modules 所以导致了现在基本上都是使用Go Modules来进行包管理了
go module 的设计思想是改变原有的基于仓库管理 golang 包的模式,而是通过更加灵活的“模块”来进行包管理,每个包含 go.mod 文件的目录都是一个模块,从而实现:

  • 一个仓库包含一个或者多个模块
  • 一个模块包含一个或多个包
  • 一个包包含该目录下的所有 go 源码文件

好了话不多B 直接说问题

import 包老显示红色

解决方法
通过修改goland 中的 go modules

自定义包引入失败

这个和上面的解决方法一样
开启了 go modules 引包就变成了从目录引入 本人理解 有点像从gopath的src引入

就像这样
这种最好的方式就是建立github.com 的文件夹 然后层层延申,这样也比较清楚
还有一种方法
直接用 相对路径引入包

即这样的方式引入包。

包的匿名引用和别名引用

话不多B
直接上代码

匿名
如果只希望导入包,而不使用包内部的数据时,可以使用匿名导入包。

import _ "包的路径"

别名
在导入包名的时候,我们还可以为导入的包设置别名。通常用于导入的包名太长或者导入的包名冲突的情况。

import 别名 "包的路径"

有时候在编译和下载库的时候会提示 Permission denied

这种情况大多数在linux 和mac下才会出现
执行如下命令

chmod -R 777 go目录