zoukankan      html  css  js  c++  java
  • golang vendor

    Go 1.5引入了vendor文件夹,其对语言使用,go命令没有任何影响。若某个路径下边包含vendor文件夹,则在某处引用包时,会优先搜索vendor文件夹下的包。

    在Go 1.5开启该项特性需设置GO15VENDOREXPERIMENT=1,而从Go 1.6开始,该项特性默认开启。

    go get -u -v github.com/kardianos/govendor 

    如果一个包在vendor和GOPATH下面都存在那么谁会优先使用呢。

    优先使用vendor目录下面的包。
    如果vendor下面没有搜索到,再搜索GOPATH下面的包。
    要么完整使用vendor下面的包,要么完整使用GOPATH下面的包,不会混合使用:

    3.1 vendor搜索方式 vendor包的搜索方式为:自包引用处,从其所在文件夹查询是否有vendor文件夹包含所引用包;若没有,然后从其所在文件夹的上层文件夹寻找是否有vendor文件夹包含所引用包,若没有,则再搜索上层文件夹的上层文件夹...,直至搜索至$GOPATH/src并搜索完成时止。 例如,如下代码中,$GOPATH/src/x/y/z/main.go引用了包"v",则不论vendor/v/v.go置于src/,src/x/,src/x/y/,src/x/y/z/中任意一个文件夹下,均可以找到。 $ cat $GOPATH/src/x/y/z/main.go

    gopm 可以将项目中的包直接下载到vendor

    https://www.jianshu.com/p/db9e6ae0d227

     go get -u github.com/gpmgo/gopm

    用gopm get -g代替go get
    不采用-g参数,会把依赖包下载.vendor目录下面;
    采用-g 参数,可以把依赖包下载到GOPATH目录中;

    使用Goland IDE创建Go项目,使用vendor管理外部引用的包,但是在import包名的时候却显示找不到目录资源。

    file --> settings -->Go-->GOPATH-->Project GOPATH 中添加当前项目的项目,必须是src的上层目录

    详情参考

    https://www.jianshu.com/p/a7c3aeb0948d

    $ ./main -h
    panic: sql: Register called twice for driver mysql
    
    goroutine 1 [running]:
    database/sql.Register(0x8152d9, 0x5, 0x8b17e0, 0xb8d610)
        /opt/app/go/src/database/sql/sql.go:51 +0x184
    github.com/go-sql-driver/mysql.init.0()
        /opt/wks/gopath/src/github.com/go-sql-driver/mysql/driver.go:84 +0x4e

    export GO111MODULE=on

    export GOPROXY=https://mirrors.aliyun.com/goproxy/

  • 相关阅读:
    hystrix项目实战
    hystrix实战总结;
    JAVA后端生成Token(令牌),用于校验客户端,防止重复提交
    如何防止表单的重复提交
    hystrix实战
    字符串为空的错误发生
    zuul的学习
    feign无法注入service
    springcloud实战案例苏宁和海信
    RPC与REST的区别
  • 原文地址:https://www.cnblogs.com/perfei/p/13189180.html
Copyright © 2011-2022 走看看