【go系列3】go 的包管理工具go modules的使用

简介: 【go系列3】go 的包管理工具go modules的使用

背景


由于之前写k8s operator在引入go的包的时候,涉及到go的包管理工具,因为自己写java已经很多年,maven的包管理工具很是好用,便想到golang是否也有类似的工具, goer都知道go的包引入带上github.com类似的前缀,就会自动从go的第三方检索服务pkg.go.dev下载对应的文件,而该检索服务会定期从github更新最新的代码。


go mod 是golang 1.11版本引入的。相对于之前要么是没有包管理,要么是管理工具不好用


使用


查看golang的版本,确保在1.11及以上版本

go version

go version go1.15.2 darwin/amd64

设置GO111MODULE为on

GO111MODULE 有三个值 : off,on,auto(默认)

off 关闭go mod的功能,查找包沿用一起的GOPATH模式或者通过vendor目录方式

on 开启go mod功能,不会去查找GOPATH目录

auto,分情况,

当前目录在GOPATH/src之外且该目录包含go.mod文件,会开启go mod功能

当前文件在包含go.mod文件的目录下面

初始化项目

直接在当前项目下执行go mod init,则会在当前项目下建立go.mod文件

如果该项目在GOPATH目录下,且没设置GO111MODULE为on,则会报错:

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

再执行go build 则会把项目依赖的文件自动添加到go.mod中且会生成go.sum文件,

如果有存在包依赖冲问题,直接修改按照提示修改go.mod文件对应的版本就可以。

如:

../../../../pkg/mod/k8s.io/client-go@v11.0.0+incompatible/kubernetes/scheme/register.go:26:2: module k8s.io/api@latest found (v0.19.4), but does not contain package k8s.io/api/auditregistration/v1alpha1

再执行go build 则会把项目依赖的文件自动添加到go.mod中且会生成go.sum文件,

如果有存在包依赖冲问题,直接修改按照提示修改go.mod文件对应的版本就可以。

如:

../../../../pkg/mod/k8s.io/client-go@v11.0.0+incompatible/kubernetes/scheme/register.go:26:2: module k8s.io/api@latest found (v0.19.4), but does not contain package k8s.io/api/auditregistration/v1alpha1
go.mod  
module github.com/monkeyboy123/custom-controller
go 1.15
require (
  github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
  github.com/imdario/mergo v0.3.11 // indirect
  golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e // indirect
  k8s.io/api v0.19.4 // indirect
  k8s.io/apimachinery v0.19.4
  k8s.io/client-go v11.0.0+incompatible
  k8s.io/klog v1.0.0 // indirect
  k8s.io/utils v0.0.0-20201110183641-67b214c5f920 // indirect
)

直接修改k8s.io/client-go v11.0.0+incompatible为k8s.io/client-go v0.19.4 即可


关于使用go mod管理的话,依赖包的下载会下到 G O P A T H / p k g / m o d 目 录 下 , 而 不 再 是 GOPATH/pkg/mod目录下,而不再是 GOPATH/pkg/mod目录下,而不再是GOPATH/src目录下


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4天前
|
数据挖掘 API Go
《Go 简易速速上手小册》第7章:包管理与模块(2024 最新版)(下)
《Go 简易速速上手小册》第7章:包管理与模块(2024 最新版)
27 1
|
1月前
|
测试技术 API 开发者
【Docker项目实战】在Docker环境下部署go-file文件分享工具
【2月更文挑战第15天】在Docker环境下部署go-file文件分享工具
67 1
|
2月前
|
Go 开发者
Go语言包管理基础:构建高效、可维护的代码库
【2月更文挑战第9天】Go语言以其简洁、高效和并发的特性受到了开发者的广泛欢迎。在Go中,包(package)是组织和管理代码的基本单位。本文将深入探讨Go语言包管理的基础知识,包括包的定义、组织结构、导入导出规则等,帮助读者更好地理解和应用Go语言中的包管理机制,构建高效、可维护的代码库。
|
3月前
|
固态存储 测试技术 Go
Go语言 os包 不可不知的性能排行榜
Go语言 os包 不可不知的性能排行榜
57 0
|
3月前
|
Go
高效Go语言编程:os包实用技术大揭示
高效Go语言编程:os包实用技术大揭示
42 0
|
3月前
|
安全 Go
时间旅行者的工具箱:Go语言time包解读
时间旅行者的工具箱:Go语言time包解读
35 0
|
20小时前
|
编译器 Go 开发者
Go语言入门|包、关键字和标识符
Go语言入门|包、关键字和标识符
8 0
|
1月前
|
大数据 Java Go
Go语言在大数据处理中的核心技术与工具
【2月更文挑战第22天】本文深入探讨了Go语言在大数据处理领域的核心技术与工具。通过分析Go语言的并发编程模型、内存管理、标准库以及第三方工具库等方面,展现了其在大数据处理中的优势和实际应用。同时,本文也讨论了如何使用这些技术与工具构建高效、稳定的大数据处理系统,为开发者提供了有价值的参考。
|
2月前
|
设计模式 测试技术 Go
Go 项目必备:Wire 依赖注入工具的深度解析与实战应用
在现代软件开发中,依赖注入(Dependency Injection,简称 DI)已经成为一种广泛采用的设计模式。它的核心思想是通过外部定义的方式,将组件之间的依赖关系解耦,从而提高代码的可维护性、可扩展性和可测试性。然而,随着项目规模的增长,手动管理复杂的依赖关系变得日益困难。这时,依赖注入代码生成工具就显得尤为重要。在众多工具中,Wire 以其简洁、强大和易用性脱颖而出,成为 Go 语言项目中的宠儿。本文将带你深入了解 Wire 的安装、基本使用、核心概念以及高级用法,并通过一个实际的 web 博客项目示例,展示如何利用 Wire 简化依赖注入的实现。准备好了吗?让我们开始这场代码解耦的奇
|
2月前
|
Go C语言
安装go-sqlite3包时报exec: "gcc": executable file not found in %PATH%解决办法
安装go-sqlite3包时报exec: "gcc": executable file not found in %PATH%解决办法

热门文章

最新文章