go 使用笔记

1、查看环境变量,使用go env

从中可以找到GOPATH的路径,而go get 命令下载的包会保存在GOPATH路径下。

2、goland 设置project gopath

3、报错:cannot find package "github.com/golang/protobuf/proto" in any of:

解决办法:go get github.com/golang/protobuf/proto

如果无法正常下载,就把github项目转到gitee后下载到本地,然后拷贝到GOPATH路径下,并修改路径。

4、go get 找不到 google.golang.org/protobuf 解决办法

5、cannot find package "golang.org/x/net/icmp" in any of:

解决办法。在GOPATH目录下新建目录golang.org/x,在x目录下,打卡git bash窗口,运行以下命令:

git clone https://github.com/golang/net.git
git clone https://github.com/golang/sys.git
git clone https://github.com/golang/tools.git

参考:Go学习笔记:关于golang.org/x包问题

6、go vendor 和go mod 

7、go list

- `go list` - This command will display information about the current package in the current directory.
- `go list -f '{{.Name}}'` - This command will display the name of the current package.
- `go list -f '{{.Imports}}'` - This command will display the imports of the current package.
- `go list -f '{{.Deps}}'` - This command will display the dependencies of the current package.
- `go list -f '{{.TestGoFiles}}'` - This command will display the test files of the current package.

8、go vendor 模式下, 找不到自定义package

把自定义go项目放在GOPATH的src目录下, 当要引入自定义包时, 使用

 import  "<project-name>/<package-name>"  #绝对路径导包,根目录是$GOPATH/src
#此外,也可以用相对路径 ./ ../ 等 导包,相对路径是相对于当前文件所在的目录的路径,但是不推荐。

9、golang 调试

        1)下载dlv模块

go get github.com/go-delve/delve/cmd/dlv

        2)调试测试代码

        测试代码和被测代码在不同的目录(包):

dlv test <file_name>_test.go  <test.go依赖符号所在的源文件>

        测试代码和被测代码在相同的目录(包, vendor模式):

dlv test <project-name>/<package-name>

        3)调试程序

dlv debug

10、格式化打印 '%+v'

在使用 `%v` 打印结构体时,只会打印出字段的值,而不会打印出字段的名称。但是,使用 `%+v` 可以打印出字段的名称和值,这对于调试和日志记录非常有用。

11、go fmt *.go

 是一个命令,用于格式化指定目录下所有的 Go 源代码文件。该命令会自动调整代码的缩进、空格、换行符等格式,以符合 Go 语言官方的代码风格规范。

12、go mod tidy

 是一个命令,用于检查并更新当前项目的依赖关系。该命令会根据项目中的代码和导入语句,自动检测需要使用的依赖包,并将其添加到项目的 `go.mod` 文件中。同时,该命令还会删除项目中未使用的依赖包。

13、nm 查看go可执行程序的符号,有些符号找不到是正常的(因为编译器内联优化),但是符号多了肯定是异常的,可能导入了错误路径的package。

14、在 Go 中,局部变量可以从函数中逃逸,编译器会自动选择在栈上还是在堆上分配局部变量的存储空间。如果一个局部变量的地址被传递到函数外部,那么这个变量的内存空间会一直存在,直到所有引用它的指针都被销毁。

15、在Go中,map和slice是引用传递。但是如果要在函数中修改slice的长度或容量(使用append函数),可以将指向slice的指针作为参数传递给函数。

16、使用vscode 调试golang程序,设置条件断点 不需要关键字if ,直接输入

变量名 == 变量值

17、

var 变量名字 类型

是用零值初始化该变量。 数值类型变量对应的零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil。数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值。

给引用类型slice,map、chan分配内存用make:

// 给slice分配内存
var intArr []int
intArr = make([]int, 0)

// 给map分配内存
var int2string map[int]string
int2string = make(map[int]string)

// 给chan分配内存
	var intChan chan int
	intChan = make(chan int)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值