尝试运行“ go test sum_test.go”会返回错误:
./ sum_test.go:18:13:未定义:SumInt8 FAIL命令行参数[构建失败]
我正在学习golang入门课程。我们的老师分发了一个代码文件sum.go和一个测试文件sum_test.go。尝试在sum_test.go上运行“ go test”会返回上述错误。该代码在我们的教师Mac上运行良好,并且他在重现问题上遇到困难。这是我的环境设置:https://pastebin.com/HcuNVcAF
sum.go
package sum
func SumInt8(a, b int8) int8 {
return a + b
}
func SumFloat64(a, b float64) float64 {
return a + b
}
sum_test.go
package sum
import "testing"
// Check https://golang.org/ref/spec#Numeric_types and stress the
limits!
var sum_tests_int8 = []struct {
n1 int8
n2 int8
expected int8
}{
{1, 2, 3},
{4, 5, 9},
{120, 1, 121},
}
func TestSumInt8(t *testing.T) {
for _, v := range sum_tests_int8 {
if val := SumInt8(v.n1, v.n2); val != v.expected {
t.Errorf("Sum(%d, %d) returned %d, expected %d",
v.n1, v.n2, val, v.expected)
}
}
}
我没有看到特别的错误,因此我希望“ go test sum_test.go”能够运行并成功。但是,似乎在sum.go中找不到方法SumInt8。
答案 0 :(得分:3)
$ go help packages
许多命令适用于一组软件包:
go action [packages]
通常,[packages]是导入路径的列表。
作为根路径或以开头的导入路径。要么 .. 元素被解释为文件系统路径并表示包 在该目录中。
否则,导入路径P表示在 GOPATH环境中列出的某些DIR的目录DIR / src / P 变量(有关更多详细信息,请参见:“ go help gopath”)。
如果未提供导入路径,则该操作将应用于 当前目录。
在特殊情况下,如果程序包列表是来自 单个目录,该命令应用于单个合成 软件包完全由这些文件组成,而忽略了任何构建约束 在这些文件中,而忽略目录中的任何其他文件。
列出测试中使用的当前目录中的所有文件:
go test sum_test.go sum.go
或只是在当前目录中测试完整的软件包。
go test
例如,
$ go test -v sum_test.go sum.go
=== RUN TestSumInt8
--- PASS: TestSumInt8 (0.00s)
PASS
ok command-line-arguments 0.002s
$
或者,对于完整的软件包
$ go test -v
=== RUN TestSumInt8
--- PASS: TestSumInt8 (0.00s)
PASS
ok so/sum 0.002s
$
选项'-v'产生详细输出。
sum_test.go
:
package sum
import "testing"
// Check https://golang.org/ref/spec#Numeric_types and stress the limits!
var sum_tests_int8 = []struct {
n1 int8
n2 int8
expected int8
}{
{1, 2, 3},
{4, 5, 9},
{120, 1, 121},
}
func TestSumInt8(t *testing.T) {
for _, v := range sum_tests_int8 {
if val := SumInt8(v.n1, v.n2); val != v.expected {
t.Errorf("Sum(%d, %d) returned %d, expected %d",
v.n1, v.n2, val, v.expected)
}
}
}
sum.go
:
package sum
func SumInt8(a, b int8) int8 {
return a + b
}
func SumFloat64(a, b float64) float64 {
return a + b
}