Golang 源使用方法

1. 简介

Golang 源的搭建主要是为了解决在LoongArch64 平台上编译golang项目对sys和net的依赖问题.

2. Golang 源使用方法

先确认当前 go 项目在编译时使用的sys和net,是否为go项目中vendor路径下的sys和net.

2.1. 打开GO111MODULE

若使用vendor路径下的sys和net,先打开GO111MODULE:

  go env -w GO111MODULE=on

2.2. 生成 go.mod 文件:

  go mod init

若项目中带有 go.sum 文件,则删除该文件

2.3. 配置源

  go env -w GOPROXY=http://goproxy.loongnix.cn:3000

2.4. 关闭校验

  go env -w GOSUMDB=off

2.5. 执行编译


  • 若项目在使用sys和net的时候是从官方网址拉取的, 则省略步骤 2.1 和 2.2.
  • 若 go 项目使用 vendor 路径下的sys和net,而且sys和net依赖的版本较少时, 则也可以先从源上获取sys和net的源码, 然后替换
    vendor路径下的sys和net源码,再执行编译即可. 获取方式如下(以 net v0.0.0-20200324143707-d3edc9973b7e 版本为例):
     go env -w GOPROXY=http://goproxy.loongnix.cn:3000
     go get golang.org/x/net@v0.0.0-20200324143707-d3edc9973b7e
    
    当执行完这两条命令后 net 的源码将下载到$GOPATH/pkg/mod 下面.

3. 常见问题处理

3.1. 缓存清除问题

若已经按照上面的方法设置 GOPROXY,但在编译时仍然报错:

   ../../../go/pkg/mod/golang.org/x/sys@v0.0.0-20190215142949-d0b11bdaac8a/unix/affinity_linux.go:13:20: undefined: _CPU_SETSIZE
   ../../../go/pkg/mod/golang.org/x/sys@v0.0.0-20190215142949-d0b11bdaac8a/unix/affinity_linux.go:13:35: undefined: _NCPUBITS

这是由于没有清除本地缓存导致,清除本地$GOPATH/go/pkg/ 后重新编译即可

3.2. 校验问题

若已经设置了 go env -w GOSUMDB=off,仍然出现以下校验错误,则删除 go.sum 文件

   go: downloading golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b
   go: downloading golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54
   verifying golang.org/x/sys@v0.0.0-20210331175145-43e1dd70ce54: checksum mismatch
       downloaded: h1:5HZZhvdNN0O5KldlyABQ6eFwlX3k1RRGy0D+JtnQ0zU=
       go.sum:     h1:rF3Ohx8DRyl8h2zw9qojyLHLhrJpEMgyPOImREEryf0=

3.3. GO111MODULE

当设置了GO111MODULE=on 后仍然从项目的 vendor 目录下读取文件,此时在 go 的编译参数中添加-mod=mod.
从go版本1.14及以上,在设置 GO111MODULE=on 的情况下,参数-mod 控制 go.mod 是否自动更新以及是否使用vendor目录.
     -mod=mod:则忽略vendor目录并自动更新go.mod
     -mod=readonly: 忽略vendor目录,并在go.mod需要更新时报告错误
     -mod=vendor: 使用vendor目录
在go版本1.14以下, 当存在vendor目录时,-mod缺省情况下使用-mod=vendor. 具体可查看

3.4. 网络问题

若在使用过程中出现类似下面的2种错误,则是由于当前网络不稳定引起的,此时尝试重新拉取即可.

  • 错误1:

    go: github.com/Azure/azure-sdk-for-go@v55.2.0+incompatible/go.mod: verifying module: github.com/Azure/azure-sdk-for-go@v55.2.0+incompatible/go.mod: Get "http://goproxy.loongnix.org:3000/sumdb/sum.golang.org/supported": dial tcp: lookup goproxy.loongnix.org on 8.8.8.8:53: read udp 10.130.0.199:52782->8.8.8.8:53: i/o timeout
    
  • 错误2:

    golang.org/x/sys@v0.0.0-20200323222414-85ca7c5b95cd: reading http://goproxy.loongnix.org:3000/golang.org/x/sys/@v/v0.0.0-20200323222414-85ca7c5b95cd.mod: 500 Internal Server Error
    


©龙芯开源社区 all right reserved,powered by Gitbook文档更新时间: 2023-12-21 12:35:32

results matching ""

    No results matching ""

    results matching ""

      No results matching ""