go 包(库)管理


本文始终跟随最新版本,因此对于过时内容会进行删除。如果发现过时,可以的话请联系我。

go mod

下述的内容已经集成到 Goland 了,因此使用 Goland 的兄弟记个 go mod tidy 就行

go module简介

go modules 是 golang 1.11 新加的特性,用来管理模块中包的依赖关系

go mod 使用方法

  • 初始化模块 go mod init <项目模块名称>
  • 依赖关系处理 ,根据go.mod文件 go mod tidy
  • 将依赖包复制到项目下的 vendor目录。 go mod vendor 如果包被屏蔽(墙),可以使用这个命令,随后使用go build -mod=vendor编译
  • 显示依赖关系 go list -m all
  • 显示详细依赖关系 go list -m -json all
  • 下载依赖 下载

    导入

全路径导入

单行导入

import "包名"

多行导入

最好按ASCII码的顺序排列。(我的建议是把这件事交给 IDE )这种机械化的事情就交给机器吧。§( ̄▽ ̄

import (
	"包名"
	"包名"
	"包名"
)

示例

import (
	_ "fmt"
	"log"
	"os"
)

只导入不使用

表示只调用和实现导入库的初始化函数(go init函数),使用场景多是数据库的连接。

import _ "包名"

示例

import _ "fmt"

为导入的包重命名

为了防止导入包具有相同的名字(不同作者起名一样很正常嘛)(ಥ _ ಥ)

impor 新名 "包名"

示例

import (
    "crypto/rand"
    mrand "math/rand" // 将名称替换为mrand避免冲突
)

导入包的重命名只影响当前的源文件。其它的源文件如果导入了相同的包,可以用导入包原本默认的名字或重命名为另一个完全不同的名字。

不显示库的名称,直接调用方法

效果就是去除了包名,当时其实不是很推荐,大型项目中命名很容易相同,此时包名就是区分功能的一大关键。

import . "包名"

下载

有些时候,你需要的包并没有被包含,因此你在写代码时不会出现代码补全;又或者你使用别人的项目发现一片红色,大概率就是你没有下载对应的包。

go get

go get 只用来下载普通的包,安装可执行程序,应该使用 go install
即 go get 现在仅仅只能增减依赖包

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.

关于 url 可以到 https://pkg.go.dev/ 中直接查询

命令格式

go get url [附加参数]

附加参数

使用 go get 时可以配合附加参数显示更多的信息及实现特殊的下载和安装操作,详见下表所示。

标记名称描述
-d让命令程序只执行下载动作,而不执行安装动作。
-f仅在使用-u标记时才有效。该标记会让命令程序忽略掉对已下载代码包的导入路径的检查。如果下载并安装的代码包所属的项目是你从别人那里Fork过来的,那么这样做就尤为重要了。
-fix让命令程序在下载代码包后先执行修正动作,而后再进行编译和安装。
-t让命令程序同时下载并安装指定的代码包中的测试源码文件中依赖的代码包。
-u让命令利用网络来更新已有代码包及其依赖包。默认情况下,该命令只会从网络上下载本地不存在的代码包,而不会更新已有的代码包。

go install

该命令用于编译并安装指定的代码包及它们的依赖包。当指定的代码包的依赖包还没有被编译和安装时,该命令会先去处理依赖包。与go build命令一样,传给go install命令的代码包参数应该以导入路径的形式提供。

并且,go build命令的绝大多数标记也都可以用于go install命令。实际上,go install命令只比go build命令多做了一件事,即:安装编译后的结果文件到指定目录。

go 代理设置


如果本文帮助到了你,帮我点个广告可以咩(o′┏▽┓`o)


评论
  目录