iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >go的modules怎么使用
  • 656
分享到

go的modules怎么使用

2023-06-30 08:06:30 656人浏览 薄情痞子
摘要

本篇内容主要讲解“Go的modules怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go的modules怎么使用”吧!1.go modules的基本介绍1.1 提供的命令在go环境的sh

本篇内容主要讲解“Go的modules怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go的modules怎么使用”吧!

    1.go modules的基本介绍

    1.1 提供的命令

    在go环境的shell中执行go mod help查看命令和说明。

    Usage:        go mod <command> [arguments]The commands are:        download    download modules to local cache        edit        edit go.mod from tools or scripts        graph       print module requirement graph        init        initialize new module in current directory        tidy        add missing and remove unused modules        vendor      make vendored copy of dependencies        verify      verify dependencies have expected content        why         explain why packages or modules are needed

    1.2 提供的环境变量

    go env查看go的环境变量,在所有go提供的环境变量中,有一个是和go mod相关的。

    GO111MODULE="on"GOPROXY="https://goproxy.cn,direct"GONOPROXY="git.example.com,x1"GONOSUMDB="git.example.com,x1"GOPATH="/home/go-project/"GOPRIVATE="git.example.com,x1"GOSUMDB="sum.golang.org"# 省略其余环境变量...
    1.2.1 说明

    1) GO111MODULE

    go语言提供GO111MODULE环境变量三个值,用于GO111MODULE的开关:

    • auto:只要项目中包含了go.mod这个文件,就启动该项目的go modules,在 Go1.11 至 Go1.14 中仍然是默认值。

    • on:启动go modules

    • off:关闭go modules

    2) GOPROXY

    go env中默认的代理是GOPROXY="Https://proxy.golang.org,direct",但是在国内是无法访问的,这里需要设置成国内的代理地址GOPROXY="https://goproxy.cn,direct"

    GOPROXY的值是一个以英文逗号 “,” 分割的 Go 模块代理列表,允许设置多个模块代理,假设你不想使用,也可以将其设置为 “off” ,这将会禁止 Go 在后续操作中使用任何 Go 模块代理。

    direct

    实际上 “direct” 是一个特殊指示符,用于指示 Go 回源到模块版本的源地址去抓取(比如 GitHub 等),场景如下:当值列表中上一个 Go 模块代理返回 404 或 410 错误时,Go 自动尝试列表中的下一个,遇见 “direct” 时回源,也就是回到源地址去抓取,而遇见 EOF 时终止并抛出类似 “invalid version: unknown revision&hellip;” 的错误。

    在cmd中执行set GO111MODULE=on

    go的modules怎么使用

    3)GONOPROXY/GONOSUMDB/GOPRIVATE

    这三个环境变量都是用在当前项目依赖了私有模块,例如像是你公司的私有 git 仓库,又或是 github 中的私有库,都是属于私有模块,都是要进行设置的,否则会拉取失败。对于一些自己的私有模块代码,需要在GOPRIVATE上设置,在拉取时会提示输入用户名和密码。

    可以设置多个,用英文的逗号分隔开;或者用通配符等

    go env -w GOPRIVATE="git.example.com,github.com/eddycjy/MQuote"go env -w GOPRIVATE="*.example.com"# 通配example.com的域名

    2.go modules的基本使用

    开启go modules后,就可以创建项目并且生成mod文件,来管理项目的所有依赖了。以下是go env环境的配置:

    GO111MODULE="auto"GOARCH="amd64"GOBIN="/go/bin/"GOCACHE="/root/.cache/go-build"GOENV="/root/.config/go/env"GOEXE=""GOFLAGS=""GOHOSTARCH="amd64"GOHOSTOS="linux"GOINSECURE=""GONOPROXY=""GONOSUMDB=""GOOS="linux"GOPATH="/home/go-project/"GOPRIVATE=""GOPROXY="https://goproxy.cn,direct"GOROOT="/go"GOSUMDB="sum.golang.org"GOTMPDIR=""GOTOOLDIR="/go/pkg/tool/linux_amd64"GCCGO="gccgo"AR="ar"CC="gcc"CXX="g++"CGO_ENABLED="1"GOMOD=""CGO_CFLAGS="-g -O2"CGO_CPPFLAGS=""CGO_CXXFLAGS="-g -O2"CGO_FFLAGS="-g -O2"CGO_LDFLAGS="-g -O2"PKG_CONFIG="pkg-config"GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build940953411=/tmp/go-build -gno-record-gcc-switches"

    设置了GOPATH/home/go-project/,并且代理指向了国内的代理地址,防止国外镜像无法访问的情况。

    2.1 初始化项目

    $GOPATH目录下创建一个新的项目example.com/mycount/helloexample.com模拟github.com,mycount模拟账号,hello是最终的项目名称。目录和文件结构:

    go的modules怎么使用

    1.1 初始化.mod文件

    hello目录下执行go mod init example.com/mycount/hello初始化hello项目的mod文件,如下:

    go的modules怎么使用

    执行完初始化操作后生成了一个go.mod的文件,里面只记录了2行:

    go的modules怎么使用

    • module:用于定义当前项目的模块路径

    • go:用于标识当前模块的 Go 语言版本,值为初始化模块时的版本,目前来看还只是个标识作用

    1.2 简单一个示例

    hello目录下写一个main.go的文件,里面用了一个第三方的库。

    package mainimport ("net/http""github.com/gin-gonic/gin""github.com/JSON-iterator/go")type resp struct {Status  int    `json:"status"`Message string `json:"message"`}func main() {router := gin.Default()router.GET("/", hello())if err := router.Run(":6060"); err != nil {panic(err)}}func hello() gin.HandlerFunc {return func(context *gin.Context) {strResp, _ := jsoniter.MarshalToString(resp{Status:  http.StatusOK,Message: "success",})context.String(http.StatusOK, strResp)}}

    hello目录下执行go get命令,拉取依赖库:

    go的modules怎么使用

    拉取依赖之后生成了一个go.mod和go.sum文件,go.mod文件:

    go的modules怎么使用

    go.sum的内容:

    go的modules怎么使用

    同时在$GOPATH目录下多了一个pkg文件,里面有拉取的文件依赖。这个文件是一个全局的缓存

    1.3 go modules的go get

    在拉取项目依赖时,你会发现拉取的过程总共分为了三大步,分别是 finding(发现)、downloading(下载)以及 extracting(提取), 并且在拉取信息上一共分为了三段内容:

    go的modules怎么使用

    需要注意的是,所拉取版本的 commit 时间是以UTC时区为准,而并非本地时区,同时我们会发现我们 go get 命令所拉取到的版本是 v0.0.0,这是因为我们是直接执行 go get -u 获取的,并没有指定任何的版本信息,由 Go modules 自行按照内部规则进行选择。

    go的modules怎么使用

    那么我想选择具体版本应当如何执行呢,如下:

    go的modules怎么使用

    3.使用go mod发布自己的包

    3.1 发布公开的包

    公开的发布包无需修改go env中的一些环境变量,默认的环境变量即可

    1.1 包的实现

    假设我们有一个模块需要提供给第三方使用,并且这个包是发布在了gittee上,假设我在gitee上得账号是gitee.com\luciferofwg。我们后期会根据迭代或者功能维护版本,每当有更新或者升级的时候就发布最新的版本,版本遵循语义化版本定义。什么是语义化版本
    这个包中包含一个函数,用于打印一句话,如下所示:

    // hello.gopackage helloimport "fmt"func SayHello()  {fmt.Println("hello world")}

    在GOPATH下新建目录hello,在命令行下进入hello目录,执行go mod init来生成go mod文件,如下:

    go的modules怎么使用

    生成的包名为gitee.com/luciferofwg/hello,后期在引用这个包时就import 这个包名。
    hello仓库提交到gitee上,完成发布包的第一个阶段。

    1.2 包的发布

    经过上一步骤,在仓库中就有了一个名为hello的公开仓库,如下:

    go的modules怎么使用

    假如我们认为这个版本是稳定可靠的,这时候我们需要发布一个可以使用的版本,gitee发布的流程如下:
    点击仓库中右侧的创建按钮,在弹出的页面中创建发行版本号,填写完毕后点击创建发行版本完成发布。

    图1 创建发行版本

    go的modules怎么使用

    图2 发行版本信息

    go的modules怎么使用

    图3 已创建的发行版本

    go的modules怎么使用

    到此我们发行了一个版本为v1.0.4的版本。

    1.3 包的使用

    对于已经发行的包,这里介绍如何使用它。首先定义一个名为test的包,因为test为调用的程序,因此我们初始化mod时直接按照程序的名字初始化,即:go mod test,完成初始化。如下:

    go的modules怎么使用

    test目录下编写如下代码:

    package mainimport "gitee.com/luciferofwg/hello"func main()  {hello.SayHello()}

    然后再命令行中执行go mod tidy整理go mod,此时go mod会根据程序包的引用关系按照包名从互联网上拉去对应的包。执行完成后go.mod如下:

    go的modules怎么使用

    运行的结果:

    go的modules怎么使用

    需要注意的是:

    默认拉去的是最新的发布版本,如果想制定版本,只需要修改go.mod中require最后面的版本号即可。如何修改go.mod参考go help mod命令的edit项。

    3.2 发布私有包

    2.1 go env环境变量和git配置的修改

    go env环境变量的修改

    私有包和公开包的区别最大的区别是权限的和git拉去包的过程,这时候需要对go env中的一些参数修改。涉及到的一些参数
    GOINSECURE,GONOPROXY,GONOSUMDB,含义:
    GOINSECURE:如果代码仓库是自己搭建的,没有“合法”的证书,则需要配置这个信息
    GONOPROXY:在这个变量中配置的域名或者仓库地址不会走代理(我们在前面设置了cn的代理)
    GONOSUMDB:1.15后会对包进行校验,此处的配置和GONOPROXY的含义一样
    看一下我们的go env变量,之前已经修改过了,内容如下:

    go的modules怎么使用

    注:
    windows下修改时直接将上述的配置增加系统的环境变量即可,linux下在bash的配置文件中修改(具体修改可以自行搜索)。

    git配置的修改

    由于是私有的包,拉去时需要获取拉去的权限,默认的https或者http的方式需要密码。如果我们本地已经配置了对应的gitee上的私钥,且已经在gitee对应的账户上配置了权限,那么我们就可以通过git@xxx的方式访问私有的仓库。
    打开本地git的配置,windows下是c:\\user\\用户名\\.bashconfig文件,打开这个文件。增加以下代码:

    [url "git@gitee.com:"]insteadof = https://gitee.com

    表示访问https://gitee.com的过程替换为git@gitee.com:,即通过bash就可以访问私有库了。

    2.2 私有包的实现

    私有包实现

    我们创建一个私有的仓库,名为hi,包含一个函数SayHello,打印hello world。
    同样的,创建go.mod,实现SayHello函数,推送到gitee。

    图1 私有仓库hi

    go的modules怎么使用

    函数和源码

    // hi包的SayHello函数package hiimport "fmt"func SayHello() {fmt.Println("hi, world")}

    hi包的go.mod

    go的modules怎么使用

    2.3 私有包的发布

    根据上述的源码,使用同样的方式发布版本。
    图1 发布的版本1.0.0

    go的modules怎么使用

    2.4 私有包的引用

    如果已经配置了go env的参数和git配置,使用的过程和公开包的使用是一样的。基于原来的版本,增加了一个hi包的函数引用和导入,在test目录下执行go mod tidy,就会自动拉取发布的包了。

    package mainimport ("gitee.com/luciferofwg/hello""gitee.com/luciferofwg/hi")func main() {hello.SayHello()hi.SayHello()}

    test程序的go.mod如下:

    go的modules怎么使用

    到此,相信大家对“go的modules怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: go的modules怎么使用

    本文链接: https://www.lsjlt.com/news/327830.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • go的modules怎么使用
      本篇内容主要讲解“go的modules怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go的modules怎么使用”吧!1.go modules的基本介绍1.1 提供的命令在go环境的sh...
      99+
      2023-06-30
    • vuex中的Modules怎么使用
      这篇文章主要介绍了vuex中的Modules怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vuex中的Modules怎么使用文章都会有所收获,下面我们一起来看看吧。1 、什么是模块ModulesVuex...
      99+
      2023-06-30
    • 怎么在Goland中使用Go Modules创建项目
      这篇文章将为大家详细讲解有关怎么在Goland中使用Go Modules创建项目,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。创建项目Location:新项目文件夹GOROOT:go 安装根...
      99+
      2023-06-14
    • Vue3的CSS Modules和Scope怎么使用
      这篇文章主要讲解了“Vue3的CSS Modules和Scope怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3的CSS Modules和Scope怎么使用”吧!Css Mod...
      99+
      2023-07-04
    • Goland使用Go Modules创建/管理项目的操作
      创建项目 Location:新项目文件夹GOROOT:go 安装根目录Proxy:https://goproxy.io,direct 重要:https://goproxy.io是下...
      99+
      2024-04-02
    • vuex中Modules的使用详解
      目录前言1 、什么是模块Modules2、模块内部参数问题3、模块命名空间问题(1)namespaced: true 使模块成为带命名空间的模块(2)带命名空间的绑定函数的使用4、模...
      99+
      2024-04-02
    • Go modules replace解决Go依赖引用问题
      为什么会用到 replace 取名是一个很有讲究的事情,但每个人都不一样。 一开始,我写了一个 A 项目,代码仓名称为 project-alpha但 go.mod 里的 packag...
      99+
      2024-04-02
    • Node.js模块Modules如何使用
      本篇内容介绍了“Node.js模块Modules如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!模块模块就是一个声明了装饰器@Modu...
      99+
      2023-07-06
    • css中 modules的作用是什么
      这期内容当中小编将会给大家带来有关css中 modules的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。css的全称是什么css的全称是Cascading Style Sheets(层叠样式表...
      99+
      2023-06-15
    • Node.js模块Modules的使用实战教程
      目录模块功能模块共享模块模块重新导出依赖注入Global modules动态模块模块 模块就是一个声明了装饰器@Module()的类。装饰器@Module()提供了元数据,以便让Ne...
      99+
      2023-05-15
      Node.js模块 Node.js Modules
    • ECMAScript modules规范怎么写
      这篇文章主要讲解了“ECMAScript modules规范怎么写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ECMAScript modules规范怎么写”吧!基本语...
      99+
      2023-07-04
    • 在 React Native 中使用 CSS Modules的配置方法
      目录安装依赖和配置使用示例有些前端工程师希望也能像开发 web 应用那样,使用 CSS Modules 来开发 React Native。本文将介绍如何在 React Native ...
      99+
      2022-11-13
      React Native使用 CSS Modules React  CSS Modules
    • vuex中使用modules时遇到的坑及问题
      目录vuex使用modules时遇到的坑vuex中modules基本用法1. store文件结构3. app.js文件内容5. 配置main.jsvuex使用modules时遇到的坑...
      99+
      2024-04-02
    • Go的Gnet怎么使用
      要使用Gnet,您需要按照以下步骤进行操作:1. 安装Gnet:您可以使用命令`go get github.com/panjf200...
      99+
      2023-08-23
      Go Gnet
    • vuex怎么动态引入store modules
      这篇文章主要为大家展示了“vuex怎么动态引入store modules”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vuex怎么动态引入store modules”这篇文章...
      99+
      2023-06-29
    • Go中的WaitGroup怎么使用
      今天小编给大家分享一下Go中的WaitGroup怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。正常情况下,新激活的g...
      99+
      2023-06-30
    • Go中的Context怎么使用
      这篇“Go中的Context怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go中的Context怎么使用”文章吧。1...
      99+
      2023-07-06
    • go语言VScode see 'go help modules' (exit status 1)问题的解决过程
      目录问题描述:解决方式:总结问题描述: go: go.mod file not found in current directory or any parent directory;...
      99+
      2024-04-02
    • webpack5新特性Asset Modules资源模块怎么用
      本文小编为大家详细介绍“webpack5新特性Asset Modules资源模块怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“webpack5新特性Asset Modules资源模块怎么用”文章能帮助大家解决疑惑...
      99+
      2023-07-05
    • go Realize怎么使用
      本文小编为大家详细介绍“go Realize怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“go Realize怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Realize是一个Go工具,专注于加...
      99+
      2023-07-05
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作