Go学习中遇到的若干问题及解决
1、go test进行单元测试时,出现undefined方法或者command-line-arguments [build failed]解决方案
问题
运行go test命令:
go test -v ringbuffer_test.go
出现错误:
解决
运行命令
go test -v ringbuffer_test.go ringbuffer.go
参考
2、go操作Mysql
2.1、将表名作为变量查询
begin, err := db.Begin()
tableName := "hi"
err = begin.QueryRow("select id from ? where id = 3", tableName).Scan(&result)
这种方法出现错误,因为go不允许将表明或列名作为变量用于Mysql。改为字符串拼接可行,
err = begin.QueryRow("select id from" + tableName + "where id = 3").Scan(&result)
2.2、出现busy buffer
不知道具体原因
本来是
err = begin.QueryRow("SELECT id FROM "+tableName+" WHERE HOST_NAME = ? AND PORT = ?", ip, mysqlPort).Err()
因为不需要查询的结果,只是想确定Mysql中有没有这条记录,所以这条语句最后面随便使用了.Err()
,好像就是这个引起的错误
后来改为
err = begin.QueryRow("SELECT id FROM "+tableName+" WHERE HOST_NAME = ? AND PORT = ?", ip, mysqlPort).Scan(&id)
就好了
2.3、net.ip类型转为string
强制类型转换失败
ipstring := string(ip)//失败
后来改为
ipString := fmt.Sprintf("%s", ip)//成功
//其实这个也行
ipString := ip.String()//成功
3、error常用的处理方式
3.1、
func name() error{
return errors.New("comment")
}
3.2、
func name() error{
err :=
return fmt.Errorf("comment %s", err)
}
4、go install
出现go install 。。。。 permission denied的情况。
已解决:
sudo chmod -R 777 go(该文件夹是GOPATH所对应的那个文件夹,该文件夹下面有bin/pkg/src三个子文件夹)
5、goimports
goimports安装
1、直接使用下面的命令将goimports安装到了GOPAHT/src下面,但该文件应该在GOPATH/bin下面。
go install golang.org/x/tools/cmd/goimports@latest
2、先执行1
再将目录切换到go/src/golang.org/x/tools/cmd/goimports下,执行
go install golang.org/x/tools/cmd/goimports