• go 系列 --依赖与工具


    目录

    1. GoPath + Govendor
    2. go.mod
    3. 其他依赖管理工具:glide、dep、go dep...
    4. 三阶段:GoPath 、GOVENDOR、 go.mod

    GoPath + GOVENDOR

    • vendor 特性则作为 GOPATH 模式补充
    • 每个项目都会有一个vendor目录,存放第三方库
    • 没有开启 go mod,则工程必须放在 GOPATH/src 目录下.

    Gopath

    • 默认路径
    - linux/unix
      ~/go
    - windows
       %USERPROFILE%/go
    
    ---
    
    - 源码: %GOPATH%/src
    - 依赖包:%GOPATH%/src/mod
    - go install结果:%GOPATH%/bin
    - go env -w:获取环境变量
    - go env -w GO111MODULE=on #设置环境变量
    

      

    • 修改GOPATH目录
    mkdir /tmp/gopathtest
    go env  //查看环境变量 
    export GOPATH= /tmp/gopathtest
    cd /tmp/gopathtest
    //将程序放在该目录下,源码保存在 %GOPATH%/src下
    mkdir src
    
    export GO111MODULE=off
    

      

    • govendor

    • Golang1.5之后默认开启GO15VENDOREXPERIMENT环境变量
    • 让每一个工程下有一个vendor目录,将依赖按项目独立开
    • 安装
    go get -u -v github.com/kardianos/govendor
    

      

    包依赖操作

    1. 用govendor从互联网下载包至%gopath%中
    2. govendor add +external 复制到vendor目录中
    #进入到项目目录
    //myproject为项目名
    cd /home/gopath/src/myproject
    
    #初始化vendor目录
    govendor init
    
    #查看vendor目录
    [root@CC54425A myproject]# ls
    commands  main.go  vendor  my_test.sh
    
    #将GOPATH中本工程使用到的依赖包自动移动到vendor目录中
    #说明:如果本地GOPATH没有依赖包,先go get相应的依赖包
    govendor add +external
    #缩写: govendor add +e 
    
    #设置环境变量
    #  GO15VENDOREXPERIMENT=1  (Go 1.6以上版本默认开启)
    export GO15VENDOREXPERIMENT=1
    

      

    依赖包查询路径
    在 "GOPATH 模式"下,执行 go buildgo run 时,在 vendor 目录、GOPATH 目录、GOROOT 目录都可能存在依赖库(标准库、第三方库等),寻找引用的依赖过程:

    1. 在当前目录下的 vendor 目录查找依赖的 package
    2. 当前目录不存在 vendor 目录,则去上一级目录寻找
    3. 重复步骤 2 直到进入 $GOPATH/src 目录
    4. 没有在 vendor 目录中查找到依赖包,则进入 $GOROOT 目录查找依赖包
    5. $GOROOT 目录也没有依赖包,则进入$GOPATH 寻找依赖包 
    

      

    Go mod

    Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。

    • go mod命令
    download    下载依赖的module到本地cache
    edit        编辑go.mod文件
    graph       打印模块依赖图
    init        在当前文件夹下初始化一个新的module, 创建go.mod文件
    tidy        增加丢失的module,去掉未用的module
    vendor      将依赖复制到vendor下,注意依赖需要在import 中声明后才能进行导入
    verify      校验依赖
    why         解释为什么需要依赖
    go get ./...  命令可以查找出当前项目的依赖
    

      

    打包命令

    • gopath模式
    export GO111MODULE=off
    export CGO_ENABLED=0
    go build  -a -v -o app main.go
    

      

    • go.mod模式
    export GO111MODULE=on
    export CGO_ENABLED=0
    go build -mod=vendor -a -v -o app main.go
    

      

    目录整理

    • GOPATH模式下典型的项目结构
    project
       src/ # 源代码文件
       src/vender/ 依赖第三方库
       pkg/  # 编译后生成的包/库文件
       bin/   # 编译后生成的可执行文件
    

      

    go多版本控制工具---gvm

     
  • 相关阅读:
    DataAnnotations
    使用BizTalk实现RosettaNet B2B So Easy
    biztalk rosettanet 自定义 pip code
    Debatching(Splitting) XML Message in Orchestration using DefaultPipeline
    Modifying namespace in XML document programmatically
    IIS各个版本中你需要知道的那些事儿
    关于IHttpModule的相关知识总结
    开发设计的一些思想总结
    《ASP.NET SignalR系列》第五课 在MVC中使用SignalR
    《ASP.NET SignalR系列》第四课 SignalR自托管(不用IIS)
  • 原文地址:https://www.cnblogs.com/saryli/p/15166368.html
Copyright © 2020-2023  润新知