为了账号安全,请及时绑定邮箱和手机立即绑定

构建期间包内的未定义变量

构建期间包内的未定义变量

Go
青春有我 2022-01-04 14:08:15
我在一个名为 的包中有两个文件db,其中一个定义了一些未导出的变量。另一个是测试文件,需要像这样使用这些变量:(这是项目的结构)$GOPATH/src/gitlab.com/myname/projectdir   ├── main.go└── db    ├── add.go    └── add_test.go(这是文件的简洁变体)数据库/添加.gopackage dbfunc Add(x, y int) int {    return x + y}// some other functions that use a and b from `add_test.go`db/add_test.gopackage dbimport (    "testing")var (    a = 1    b = 2)// test function use variables from add.gofunc testAdd(t *testing.T) {    result := add(a, b)    if result != 3 {        t.Error(err)    }}go test在db/通过的目录中运行,但是一旦我运行go run main go它就会产生以下错误:db/add.go:: 未定义:adb/add.go:: 未定义:b似乎在构建过程中add.go找不到a和b来自add_test.go。main.gopackage mainimport (    "fmt"    "gitlab.com/myname/projectdir/db")func main() {    res := db.Add(1, 2)    fmt.Println(res)}这是因为add_test.go在构建过程中不包括在内吗?
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

这就是 go 工具的工作方式。

_test.go文件仅在您运行时编译go test。当一个包从另一个包中导入时,_test.go不会使用其文件中的任何代码。

尝试运行go buildgo install从 db 包中运行。它会失败。


查看完整回答
反对 回复 2022-01-04
?
皈依舞

TA贡献1851条经验 获得超3个赞

相对路径在 Go 中很敏感。一方面,我认为您需要在它们前面加上import "./db". 另一件事是你应该在你的 $GOPATH/src 位置。

试试这个:

  • 将您的文件移动到$GOPATH/src/project$GOPATH/src/project/db目录下。

  • ./db为数据库包添加导入路径的前缀。

至于 IDE,这完全取决于您使用的插件。尝试自己运行这些工具:golintgo vetoracle等以查看实际的 go 警告和错误。


查看完整回答
反对 回复 2022-01-04
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

测试功能应以 Test 开头。这就是文档所说的。


func TestAdd(t *testing.T) {

    result := Add(a, b)

    if result != 3 {

        t.Errorf("expected 3, got %d ", result)

    }

 }


查看完整回答
反对 回复 2022-01-04
  • 3 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信