go - 无法从同一目录中的文件导入函数
问题描述
我正在关注一个教程并坚持这一点。我也试图通过官方文档,但无法发现这是错误的。
在这里发布之前,我发现还需要配置 GOPATH。
GOPATH: A:\GO
utils 文件夹路径:A:\GO\fem-intro-to-go\05_toolkit\code\utils
utils 中有 2 个文件,math.go和add_test.go。
数学.go
package utils
import "fmt"
func printNum(num int) {
fmt.Println("Current Number:", num)
}
// Add adds together multiple numbers
func Add(nums ...int) int {
total := 0
for _, v := range nums {
printNum(v)
total += v
}
return total
}
add_test.go
package utils
import "testing"
func TestAdd(t *testing.T) {
expected := 4
actual := Add(2, 2)
if actual != expected {
t.Errorf("Add function does not add up: Expected: %d, Actual: %d", expected, actual)
}
}
VS 代码在 add_test.go 中给出错误:未声明的名称:添加
错误的完整描述:
{
"resource": "/a:/GO/fem-intro-to-go/05_toolkit/code/utils/add_test.go",
"owner": "_generated_diagnostic_collection_name_#1",
"code": {
"value": "UndeclaredName",
"target": {
"$mid": 1,
"external": "https://pkg.go.dev/golang.org/x/tools/internal/typesinternal?utm_source%3Dgopls#UndeclaredName",
"path": "/golang.org/x/tools/internal/typesinternal",
"scheme": "https",
"authority": "pkg.go.dev",
"query": "utm_source=gopls",
"fragment": "UndeclaredName"
}
},
"severity": 8,
"message": "undeclared name: Add",
"source": "compiler",
"startLineNumber": 9,
"startColumn": 12,
"endLineNumber": 9,
"endColumn": 15
}
解决方案
使用 go 1.16.6 构建代码时,我没有看到任何问题。如果我开始一个新的 Go 项目:
mkdir example
cd example
go mod init example
然后将您的代码放在utils/
目录中,并将以下内容放入main.go
:
package main
import (
"example/utils"
"fmt"
)
func main() {
answer := utils.Add(1, 2, 3)
fmt.Printf("got answer: %d\n", answer)
}
所以我有以下布局:
$ tree .
.
├── example
├── go.mod
├── main.go
└── utils
├── add_test.go
└── math.go
您的代码编译时出现问题:
$ go build
我运行生成的二进制文件:
$ ./example
Current Number: 1
Current Number: 2
Current Number: 3
got answer: 6
我想指出,我没有设置GOPATH
或任何其他GO*
环境变量来使它工作。
推荐阅读
- php - 使用 $_GET 将变量传递给多个页面
- html - 在主 div 中居中 div 和内容
- jenkins - Jenkins 动态流水线参数
- sql - 使用查询查找范围内的日期
- javascript - AnalyserNode.getFloatFrequencyData 总是返回 -Infinity
- node.js - 在 heroku 中部署 angular/Nodejs 应用程序
- jersey - 使用 Keycloak 4.3.0.Final 和 dropwizard 1.3.1
- c# - 你调用的对象是空的。- 抱歉,我无法理解其他发布类似内容的人
- python - 为什么在 python 中非常大的浮点值之间的比较会失败?
- sql - 计算每个类别中的员工(两个表)