Go 生成期间包中未定义的变量
我在一个名为Go 生成期间包中未定义的变量,go,Go,我在一个名为db的包中有两个文件,其中一个文件定义了几个未报告的变量。另一个是测试文件,需要使用以下变量: (这是项目的结构) (以下是文件的简短变体) db/add.go package db func Add(x, y int) int { return x + y } // some other functions that use a and b from `add_test.go` package db import ( "testing" ) var (
db
的包中有两个文件,其中一个文件定义了几个未报告的变量。另一个是测试文件,需要使用以下变量:
(这是项目的结构)
(以下是文件的简短变体)
db/add.go
package db
func Add(x, y int) int {
return x + y
}
// some other functions that use a and b from `add_test.go`
package db
import (
"testing"
)
var (
a = 1
b = 2
)
// test function use variables from add.go
func testAdd(t *testing.T) {
result := add(a, b)
if result != 3 {
t.Error(err)
}
}
package main
import (
"fmt"
"gitlab.com/myname/projectdir/db"
)
func main() {
res := db.Add(1, 2)
fmt.Println(res)
}
db/add\u测试开始
package db
func Add(x, y int) int {
return x + y
}
// some other functions that use a and b from `add_test.go`
package db
import (
"testing"
)
var (
a = 1
b = 2
)
// test function use variables from add.go
func testAdd(t *testing.T) {
result := add(a, b)
if result != 3 {
t.Error(err)
}
}
package main
import (
"fmt"
"gitlab.com/myname/projectdir/db"
)
func main() {
res := db.Add(1, 2)
fmt.Println(res)
}
在db/
目录中运行go-test
已通过,但一旦我运行go-run main-go
它就会产生以下错误:
db/add.go::未定义:adb/add.go::未定义:b 似乎
add.go
在构建过程中无法从add\u test.go
中找到a
和b
main.go
package db
func Add(x, y int) int {
return x + y
}
// some other functions that use a and b from `add_test.go`
package db
import (
"testing"
)
var (
a = 1
b = 2
)
// test function use variables from add.go
func testAdd(t *testing.T) {
result := add(a, b)
if result != 3 {
t.Error(err)
}
}
package main
import (
"fmt"
"gitlab.com/myname/projectdir/db"
)
func main() {
res := db.Add(1, 2)
fmt.Println(res)
}
这是因为在构建过程中不包括
add\u test.go
?在go中相对路径是敏感的。首先,我认为您需要在它们前面加上import./db“
。另一件事是,您应该位于$GOPATH/src位置
试试这个:
- 将文件移动到
和$GOPATH/src/project
目录下$GOPATH/src/project/db
- 为db包的导入路径添加前缀
/db
至于IDE,这取决于您使用的插件。尝试自己运行这些工具:
golint
、govet
、oracle
,等等,以查看实际的go警告和错误。这就是go工具的工作方式
\u test.go
文件仅在运行go test
时编译。从另一个包导入包时,不会使用其\u test.go
文件中的任何代码
尝试从db包内部运行
go build
或go install
。它将失败。测试功能应以测试开始。这就是文件所说的
func TestAdd(t *testing.T) {
result := Add(a, b)
if result != 3 {
t.Errorf("expected 3, got %d ", result)
}
}
干杯。我不太明白你的建议。您是否建议我在
db
中的每个文件中使用相对导入,如/db
?您的代码示例不完整。我假设projectDir
是一个package main
运行时,因此您的go run main.go
语句。它就在这个main.go
(以及这个main
包中的任何其他东西)中,它将引用您的数据库代码和import./db”
。另外,请确保所有内容都在您的$GOPATH/src/
中。很抱歉,我添加了项目结构以获得更多澄清。啊,我明白了。关于引用本地软件包的另一件事:如果您不断修改该软件包,则需要使用继续刷新它,安装gitlab.com/myname/projectdir/db
。go build
工具对导入页面进行一些缓存。运行go install
将强制刷新该包的缓存。试试看,让我知道。还是不行。另外,当我刚刚在db
目录中运行go build
时,也发生了相同的错误。