• 【笔记】go语言go语言的依赖管理


    【笔记】go语言--go语言的依赖管理

    GO语言的依赖管理

    • 依赖的概念,依赖就是第三方的库,即别人已经做好的库
    • 依赖管理的三个阶段 GOPATH,GOVENDOR, go mod

    三个阶段 - GOPATH

    GOPATH 默认在~/go(unix linux ) %USERPROFILE%\go(windows),坏处就是会不断地增加内容,以至于对其余功能造成影响

    需要注意:是没有办法区分不同依赖的不同版本的

    //go path 的一些命令
    新建路径:export GOPATH=/Users/apple/Desktop/project/src
    关闭电脑所有的 go env -w GO111MODULE = off
    项目关闭  export GO111MODULE = offgo path 
    获取库 go get -u go.uber.org/zap
    

    使用gopath对依赖的查找大致分为两个步:首先要去GOROOT下的src目录下查找,需要注意的是,gopath下必须建立src目录,然后去GOPATH下的src目录查找,如果找不到库的话,就要去看一下是不是对应的地方没有放好

    每个项目都可以设置自己的gopath

    问题:同一个目录下的两个工程依赖于不同版本的同一个库?

    解决办法:针对GOPATH,在两个工程下放置各自的工程的对应版本的库,因为在编译时优先从各自的工作目录下查找对应的库。

    单纯的GOPATH是不好处理的,此时也就引出了GOVENDOR

    三个阶段 - GOVENDOR

    • 每个项目有自己的vendor目录,存放第三方库
    • 大量第三方依赖管理工具 : glide, dep, go dep,...

    使用gopath+vendor对依赖的查找有三个步:首先去项目目录下的vendor目录查找,然后去GOROOT和GOPATH下的src目录下查找,一般来说依赖是下载到gopath目录,然后拷贝到项目下的vendor目录,可以使用依赖管理工具自动完成这个拷贝任务

    三个阶段 - go mod

    • 由go命令统一的管理,用户不必关心目录结构
    • 初始化: go mod init
    • 增加依赖: go get
    //一些命令
    新建mod :go mod init XXX
    升级修改go.uber.org/zap v1.20.0版本:go get -u go.uber.org/zap@v1.12.0
    清除掉不用的历史版本数据:go mod tidy 
    旧项目迁移:go mod init XXX,go build ./...;完成后vendor、glide等都可以删除了;
    之前做过glide、dep之类的依赖管理,go mod 会自动迁移过来;
    添加外部依赖的两个方法:1.使用go get;2.直接在代码中import依赖,然后build
    
    //引用项目的包
    import的路径 = go.mod下的module name + 包相对于go.mod的相对目录
    

    目录的整理

    • go build 构建当前目录,当前目录不允许多个main函数
    • go build ./... 构建当前目录以及子目录,该方式不产生结果,只是检查编译
    • go install ./... 产生编译结果,存放在gopath/bin目录下
  • 相关阅读:
    Java乔晓松oracle的多表查询
    定义一个地址固定的变量
    J2ME的表单元素及其事件
    J2me的异常处理和多线程
    [置顶] eclipse远程部署,静态文件实时同步插件
    newlisp debugger
    启用isqlplus
    ORA27101: shared memory realm does not exist
    windows下安装node.js及less
    em启动/关闭报错解决
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/15872521.html
Copyright © 2020-2023  润新知