首页 > 其他分享 >golang 1.18 workspace mode

golang 1.18 workspace mode

时间:2023-09-25 14:44:10浏览次数:46  
标签:GOPATH 依赖 workspace Modules 1.18 golang 版本 目录

why ? 为什么需要workspace

  • 历史发展和版本依赖的管理

GOPATH 最开始的模式

  • 开发者需要设置一个环境变量 GOPATH,用于指定项目的工作空间。GOPATH 是一个目录路径,其中包括了三个重要的子目录:src、bin 和 pkg
  • 通过 go get 命令,GOPATH/src 下的相应目录中
  • 缺点 :
    • 必须指定GOPATH 目录
    • 全部项目必须全局共享一个依赖目录
    • 如何出现两个项目依赖的用一个库的版本不同 出现冲突切无法处理

改进的版本 Go Modules

  • Go Modules 是从 Go 1.11 版本开始引入
  • 没有必须指定GOPATH 目录
  • 每个新项目都有自己的依赖有效的处理版本冲突
  • 甚至引入 go mod vendor 离线构建和更精确地控制依赖版本
  • 缺点 :
    • 如何多个Modules之间项目依赖 使用 repace 替换

最终的 workspace mode Go1.18

  • 在Modules上面构建一层通用管理层 go.wrok
  • 使用 use 关键词 引入 Modules

标签:GOPATH,依赖,workspace,Modules,1.18,golang,版本,目录
From: https://www.cnblogs.com/guanchaoguo/p/17727898.html

相关文章

  • golang 的循环导入
    内容来自对chatgpt的咨询循环导入概念在Go语言中,循环导入是一个需要避免的问题。它发生在两个或更多的包彼此导入对方,形成一个导入循环,导致编译器无法处理。例如,假设你有两个包,包A和包B。包A导入了包B,然后包B又导入了包A,这就形成了一个循环导入。在这种情况下,编译器将无法......
  • golang 怎么使用接口中声明的方法
    假设你有一个golang的interface,里面声明了1个函数,怎么调用这个函数typeManinterface{ Eat(ctxcontext.Context,foodstring})error}使用方式创建结构体实现这个接口声明的方法,然后创建该结构体对象,调用方法案例首先,我们需要创建一个实现了这个接口的结构体:type......
  • golang 使用redis设置分布式锁 demo
    内容来自对chatgpt的咨询分布式锁是在多个节点上运行的应用程序中协调工作的一种常用方法,而Redis是实现分布式锁的流行选择。以下是使用Go语言和github.com/go-redis/redis库来设置Redis分布式锁的一个简单示例:首先,确保你已经安装了该库:goget-ugithub.com/go-redis/redi......
  • golang 对字符串进行base64编解码、md5 编码
    内容来自对chagpt的咨询一、对字符串进行base64编解码base64编码要在Go语言中对字符串进行base64编码,你可以使用标准库中的encoding/base64包。以下是一个简单的示例:packagemainimport( "encoding/base64" "fmt")funcmain(){ data:="Hello,World!" enc......
  • golang 把内容写到 csv 文件或者 xlsx 文件里
    内容来自对chatgpt的咨询csv格式csv格式的文件使用wps或者office打开后是一个excel表格的形式,很容易看到表格里的数据。csv格式跟markdown格式有点像,只需要按照固定的语法放置文本,保存后,用对应的渲染软件打开,就能得到想要的效果。比如下面这段json,用文本编辑器......
  • 从一个golang 员工emp数组中,找到其中name相同的元素,把结果放到一个新数组里,代码实现
    内容来自对chatgpt的咨询为了找到具有相同名称的员工,并将结果放入一个新的数组中,我们可以首先使用一个映射(map)来存储每个名称及其出现的次数。然后,我们可以遍历原始数组并使用映射来判断是否有重复的名称。以下是一个示例代码,演示如何实现这一目标:packagemainimport( ......
  • Docker - ERROR: failed to solve: golang:latest: error getting credentials - err:
    Dockerfile:FROMgolang:latestWORKDIR/appADD..RUNgoenv-wGOPROXY=https://goproxy.io,directRUNgogetRUNgobuild-oapp.CMD["/app/app"] zzh@ZZHPC:/zdata/MyPrograms/Go/aaa$dockerbuild-ttest:v1.[+]Building1.3s(3/3)FINI......
  • golang 有没有 类似 typescript 的 联合类型?
    Go语言(Golang)不像TypeScript那样直接支持联合类型(UnionTypes)。在TypeScript中,联合类型允许一个变量具有多个不同的数据类型,而在Go中,通常使用接口(interfaces)和具体类型来处理类似的情况。以下是在Go中处理联合类型的一些方法:使用接口:Go中的接口可以用于定义一组方法的契约,而不是特......
  • 最简单的方式实现 Golang的级别日志
    lo.gopackageloimport("log""os")const(TRACEint=iotaDEBUGINFOWARNERRORFATAL)typeLevelLoggerstruct{levelintlogger*log.Logger}varl*LevelLoggerfuncinit(){......
  • golang 实现 socks5 正向代理服务器
    socks5proxy.gopackagemainimport("encoding/binary""errors""flag""fmt""io""net""strconv")varportintfuncmain(){flag.IntVar(&port,......