go test 在同一个包中找不到函数

标签 go

目录结构为:

src
src/pkg
src/pkg/t1.go
src/pkg/t1_test.go

t1.go

package pkg

import (
"fmt"
)

func SayHI(){
    fmt.Println("this is t1")
}

t1_test.go

package pkg

import (
    "testing"
)

func TestXYZ(t *testing.T) {
    SayHI()
}

从目录 src/pkg

的命令行调用 go test

去测试 t1_test.go


错误:

./t1_test.go:8: undefined: SayHI
FAIL    command-line-arguments [build failed]

但功能在那里

感谢任何提示

最佳答案

它正在按预期工作。

jnml@fsc-r630:~/src/pkg$ go help test
usage: go test [-c] [-i] [build flags] [packages] [flags for test binary]

'Go test' automates testing the packages named by the import paths.
It prints a summary of the test results in the format:

    ok   archive/tar   0.011s
    FAIL archive/zip   0.022s
    ok   compress/gzip 0.033s
    ...

followed by detailed output for each failed package.

'Go test' recompiles each package along with any files with names matching
the file pattern "*_test.go".  These additional files can contain test functions,
benchmark functions, and example functions.  See 'go help testfunc' for more.

By default, go test needs no arguments.  It compiles and tests the package
with source in the current directory, including tests, and runs the tests.

The package is built in a temporary directory so it does not interfere with the
non-test installation.

In addition to the build flags, the flags handled by 'go test' itself are:

    -c  Compile the test binary to pkg.test but do not run it.

    -i
        Install packages that are dependencies of the test.
        Do not run the test.

The test binary also accepts flags that control execution of the test; these
flags are also accessible by 'go test'.  See 'go help testflag' for details.

For more about build flags, see 'go help build'.
For more about specifying packages, see 'go help packages'.

See also: go build, go vet.
jnml@fsc-r630:~/src/pkg$ 

换句话说:

  • go test没关系。
  • go test pkg (假设 $GOPATH 是 ~ 并且包在 ~/src/pkg 中)没问题。
  • go test whatever_test.go不行,因为不支持如上记录的

要选择运行哪些测试,请使用 -run <regular_expression>标志(其中 <regular_expression> 被解释为两端都有通配符,如 .*<regular_expression>.* )。例如

$ go test -run Say # from within the package's directory

$ go test -run Say my/package/import/path # from anywhere

关于go test 在同一个包中找不到函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14723229/

相关文章:

go - 如何从 Go 中的文件中读取配置键/值对?

go - 如何为接受 interface{} 的函数创建类型条件?

go - 无法接收超时消息

json - 如何使用 golang+jason 从命名的 json 中获取数据?

go - 如何连接 Go 应用程序和 Apache Solr?

go - 使用嵌入式 core.v1.PodSpec 验证 CRD

go - 无法获得具有相同键名(* http.Header)的响应头

go - 将 *extensions.Deployment 转换为 *v1beta1.Deployment (Kubernetes client-go)

go - 根据 Golang 中 hashmap 的值获取键的简单方法

go - 在并发环境中从 map 中删除是否安全?在戈兰