$GOPATH默认位置

操作系统默认路径示例环境变量表示法
macOS/Users/用户名/go$HOME/go
Linux/home/用户名/go$HOME/go
WindowsC:\Users\用户名\go%USERPROFILE%\go

not a valid zip file

github.com/shirou/gopsutil/process: zip: not a valid zip file

此类问题多是因为GOPROXY所导致。

使用https://mirrors.aliyun.com/goproxy/,direct的时候,在进行go build/go mod tidy等指令时就会出现此错误。

换成https://goproxy.cn,direct即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ mkdir go-example && cd go-example
#GO111MODULE=on,使用go module,不使用GOPATH
#GO111MODULE=off,使用GOPATH,不使用go module
#GO111MODULE=auto,取决于当前工作路径
#如果项目在%GOPATH/src内,等同于GO111MODULE=off,即使用GOPATH
#如果项目在%GOPATH/src外,等同于GO111MODULE=on,即不是GOPATH
$ go env -w GO111MODULE=auto
#配置代理(国内)
$ go env -w GOPROXY=https://goproxy.cn,direct
#部分配置使用私有地址:
$ go env -w GOPRIVATE=.gitlab.com,.gitee.com
#配置阿里的地址, 如果不生效就手动配置环境变量
#$ go env -w GOPROXY="https://mirrors.aliyun.com/goproxy/,direct"
#Go 1.13设置了默认的GOSUMDB=sum.golang.org,是用来验证包的有效性。这个网址由于墙的原因可能无法访问,所以可以使用下面命令来关闭
$ go env -w GOSUMDB=off
#初始化项目
$ go mod init
go: creating new go.mod: go-example
$ ls
go.mod
$ go get xxx@v1.0.0 #下载依赖(也可用作升级和降级版本),不加@则为最新版

设置goland本身的代理

使用vendor(GOPATH模式正在逐步淘汰, 新项目不建议使用)

目录结构

1
2
3
4
5
6
7
8
9
$GOPATH/src
|----appmodule1
|----*.go
|----appmodule2
|----*.go
|----<main>
|----main.go
|----vendor
|----github.com

注意点

  • 模块<main>指得是你的app的main模块名字,当然也可以使用appname作为目录名,但是这里面的文件例如main.go必须用main作用package name,因为这个模块是应该main模块的;(相比较其他的appmodule1,appmodule2,他们的模块名也应该是路径名)
  • vender必须在模块目录下面,例如main/vendor,而不能在GOPATH/src目录下面。

go编译办法

这和当前工作路径相关:

如果当前路径在$GOPATH/src,或者其子目录下面,那么vendor有效。

  • PWD=$GOPATH/src/main: go build
  • PWD=$GOPATH/src: go build -o <myapp> main/main.go
    如果当前路径不在$GOPATH/src,或者其子目录下面,那么vendor无效,因为使用的是module依赖,而不是vendor依赖包管理了。

go get的时候遇到unrecognized import path "golang.org/x/net/html"提示

$GOPATH目录的src文件夹内建立如下目录 golang.org/x, 然后git clone https://github.com/golang/net到这里即可。

package google.golang.org/protobuf/proto: unrecognized import path "google.golang.org/protobuf/proto"

1、将 google.golang.org/protobuf 包对应的github上的地址git或下载下来,github地址:
git clone https://github.com/protocolbuffers/protobuf-go protobuf
2、在在Go的"$GOPATH"目录的src目录下,创建“google.golang.org” 目录;
3、将下载或git文件的protobuf-go/目录下的全部内容clone到上面创建的google.golang.org目录下。

记录解决golang操作es时证书安全验证问题

注: go-es包使用的是https://github.com/olivere/elastic

当es配置了ssl,但是证书是自签证书,那可能在操作初始化es-client时候会报这样错误

certificate signed by unknown authority

这个问题我在issue中找到了答案

可以通过配置httpclient来忽略ssl验证

最终改造结果如下

1
2
3
4
var client *elastic.Client
var host = "https://192.168.56.103:9200"
var userName = "elastic"
var passWord = "xiaowu"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var err error
httpClient := &http.Client{Transport: &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}}
client, err = elastic.NewClient(
elastic.SetHttpClient(httpClient),
elastic.SetURL(host),
elastic.SetScheme("https"),
elastic.SetSniff(false),
elastic.SetBasicAuth(userName,passWord),
)
if err != nil {
panic(err)
}
_, _, err = client.Ping(host).Do(context.Background())
if err != nil {
panic(err)
}
_, err = client.ElasticsearchVersion(host)
if err != nil {
panic(err)
}