一. 环境配置
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct
二. go mod 使用
在系统任意目录下建立gomodtest目录,而不需要把gomodtest放到GOPATH目录下。
1. cmd 到当前gomodtest目录下,运行 go mod init gomodtest
2. 建立main文件,内容如下:
package main
import(
"fmt"
"sum"
"github.com/jinzhu/configor"
)
func main() {
fmt.Println("hello world")
fmt.Println("sum=",sum.Sum(2, 5))
fmt.Println("使用外部包测试:", configor.Config{})
}
3. 建立目录sum,cmd进到sum目录下运行 go mod init sum,在sum下新建sum.go文件,内容如下:
package sum
func Sum(a int, b int) int {
return a + b
}
4. cmd进到gomodtest目录下,运行go run main.go。
报错提示:
main.go:6:5: no required module provides p
add it:
go get github.com/jinzhu/configor
我们运行 go get github.com/jinzhu/configor
然后再运行go run main.go
报错提示:
main.go:5:5: package sum is not in GOROOT (D:\Program Files\Go\src\sum)
提示找不到sum包。打开go.mod文件,添加新内容。
旧文件:
module gomodtest
go 1.16
require (
github.com/jinzhu/configor v1.2.1
)
新文件:
module gomodtest
go 1.16
require (
github.com/jinzhu/configor v1.2.1
sum v0.0.0
)
replace sum => ./sum
再次运行go run main.go
输出结果如下:
hello world
sum= 7
使用外部包测试: { false false false false 0s false}
有时候会有一些奇怪的报错,运行一下命令 go mod tidy
当然,要想使用sum目录下的包,最简单的方式还是直接import!!引用方式跟使用GOPATH是一样。既gomodtest /sum。文件如下:
module gomodtest
go 1.16
require (
github.com/jinzhu/configor v1.2.1
)
而此时sum目录下不需要有go.mod文件,有go.mod文件也不影响
而main.go文件内容如下:
package main
import(
"fmt"
// "sum" 之前的引用方式,这种情况要使用replace
"gomodtest/sum"
"github.com/jinzhu/configor"
)
func main() {
fmt.Println("hello world")
fmt.Println("sum=",sum.Sum(2, 5))
fmt.Println("使用外部包测试:", configor.Config{})
}
运行go run main.go 即可
目录结构:
版本:go 1.15.10
gomodtest文件夹
sum文件夹
sum.go
sum2文件夹
sum2.go
main.go
当go build时会自动下载相关依赖包然后编译,main.go中有对sum包的引用,或者sum2包中有对sum包的引用同时main包引用sum2包,以上两种情况都没有任何问题。
而对于当前最新的go版本(1.16.3),go build时,相关依赖包需要手动下载,并且,上述类似的包引用方式,将找不到相应的包!!!
注:以上方法,sum目录必须在当前gomodtest目录下,如果sum目录不在gomodtest目录下,比如同级或者更高等,则需要用require 和 replace,同时sum目录下需要有go.mod文件
5. 比如如下情况,来自于这里
目录结构
├── moduledemo
│ ├── go.mod
│ └── main.go
└── mypackage
├── go.mod
└── mypackage.go
导入包
这个时候,mypackage也需要进行module初始化,即拥有一个属于自己的go.mod文件,内容如下:
module mypackage
go 1.14
然后我们在moduledemo/main.go中按如下方式导入:
import (
"fmt"
"mypackage"
)
func main() {
mypackage.New()
fmt.Println("main")
}
因为这两个包不在同一个项目路径下,你想要导入本地包,并且这些包也没有发布到远程的github或其他代码仓库地址。这个时候我们就需要在go.mod文件中使用replace指令。
在调用方也就是packagedemo/go.mod中按如下方式指定使用相对路径来寻找mypackage这个包。
module moduledemo
go 1.14
require "mypackage" v0.0.0
replace "mypackage" => "../mypackage"
6. 对于一个包,如果它的github地址为:github.com/topfreegames/pitaya,初始化的时候我们可以这样 *** 作:go mod init github.com/topfreegames/pitaya
则go.mod文件如下:
那么在程序中使用pitaya中的某个包时可以直接如图所示这样使用:
当我点击component时,它直接跳到了当前目录下的component的目录下!!!
而对于引用的其它网络包,当我点击它时,它会跳到$GOPATH/pkg/mod目录下的相应包目录里面!!!
7. 而对于另外一种情况,希望把pitaya作为一整个包使用,则可以这样:
go.mod文件内容如下:
目录结构如下:
echo_server.go 内容如下:
可以看到,我们可以直接使用pitaya里的各个包
三. go mod 在goland中的调试
goland下采用go mod 的方式,怎么配置goland使用go mod 的方式可以网上搜索!
配置后调试go程序,发现断点全是灰色的!!!鼠标移到灰色的断点上会提示:Only part of a ReadProcessMemory or WriteProcessMemory request was completed。解决办法:
1、升级goland到最新版本:goland与golang的版本不匹配,导致goland安装包的dlv.exe程序在调试go mod模式时的go程序存在兼容问题。
2、单独升级goland目录下的dlv.exe程序:
a. 可以下载较新的dlv.exe程序覆盖本地的dlv.exe:我已经上传了,可以到我的资源里面去下载。golang调试程序dlv.exe(delve)_delve-其它文档类资源-CSDN下载
b. 也可以自己编译最新的dlv程序生成dlv.exe:在cmd命令行(任意目录即可)运行 go get -u github.com
/go-delve/delve/cmd/dlv,成功后在GOPATH/bin目录下会生成dlv.exe,覆盖掉goland目录下的dlv.exe,然后重启goland即可。
覆盖后
需要注意的是go的版本与dlv的版本要匹配才行,不然debug时会出问题,比如当goland勾选时,直接运行调试按钮
会提示错误(go是1.15.10, dlv是1.8.1,所以版本不匹配):
这时候要么升级go版本,要么降低dlv版本即可。
四. 使用goland的 附加到进程时(Attach to Process)发现是空的,没有任何可以附加的进程,这时候可以查看goland右下方,一般会提示你go get ***,安装提示下载完成后即可使用了!!!
五. golang工具:gofmt、golangci-lint
olangci-lint在goland中的配置:
go get -u GitHub - golangci/golangci-lint: Fast linters Runner for Go
然后会在GOPATH目录中生成 golangci-lint.exe
官网的说明文件如下:
golangci-lint 官网安装教程
goland配置如下:
这样配置后当文件有改变且保存时就会自动执行 golangci-lint 了!
注意:
1. go 版本与 golangci-lint 版本对应如下:
go < 1.9 isn't supported
go1.9 is officially supported by golangci-lint <= v1.10.2
go1.10 is officially supported by golangci-lint <= 1.15.0.
go1.11 is officially supported by golangci-lint <= 1.17.1.
go1.12+ are officially supported by the latest version of golangci-lint (>= 1.18.0).
2. golangci-lint的安装也可以使用如下方式。
这种方式下载的golangci-lint在目录
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)