go - Go run/build 找不到源文件
问题描述
我正在尝试运行一个简单的 hello world 样式程序,该程序从单独的自定义包中导入打印功能,但尽管$GOPATH
设置了正确的等,Go 仍无法找到它。
缺少什么会使文件被拾取?
etherk1ll@ubuntu:~/Development/GoWorkSpace/src/sonarparser$ echo $GOPATH
/home/etherk1ll/Development/GoWorkSpace/
etherk1ll@ubuntu:~/Development/GoWorkSpace/src/sonarparser$ pwd
/home/etherk1ll/Development/GoWorkSpace/src/sonarparser
etherk1ll@ubuntu:~/Development/GoWorkSpace/src/sonarparser$ ls
jsonparser.go main.go
etherk1ll@ubuntu:~/Development/GoWorkSpace/src/sonarparser$ go run main.go
main.go:5:2: cannot find package "sonarparser/jsonparser" in any of:
/usr/local/go/src/sonarparser/jsonparser (from $GOROOT)
/home/etherk1ll/Development/GoWorkSpace/src/sonarparser/jsonparser (from $GOPATH)
main.go
package main
import (
"fmt"
"jsonparser"
)
func main() {
fmt.Println("Hello world 1")
fmt.Println(jsonparser.HelloTwo)
}
jsonparser.go
package jsonparser
import "fmt"
func HelloTwo() {
fmt.Println("Hello world 2")
}
解决方案
因为jsonparser.go
和main.go
位于同一个包中,Go 要求这些文件具有相同的包名。并且因为您为执行定义了 main 函数,所以包必须是“main”。
第 1 步:所以您应该将jsonparser.go
的包重命名为main
.
// jsonparser.go
package main
import "fmt"
func HelloTwo() {
fmt.Println("Hello world 2")
}
第 2 步:您需要更新main.go
文件以更正导入路径:
// main.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello world 1")
HelloTwo()
}
第 3 步:然后运行以下命令(您必须在命令中包含所有必要的文件)
go run main.go jsonparser.go
推荐阅读
- python - 如何返回在不同字典中获得新值的字典键的值
- c - C - 用getpid()中的ID替换字符串中的$$?
- c# - 无法弄清楚为什么我从 app.xaml 加载静态资源时出错
- elm - 导入特定功能与在 elm 中公开所有功能
- project-reactor - 从 SQS 队列上的消息创建 Flux
- c++ - 如何使用 Clang 在 C++17 中指定 utf-16 字符串文字的字节顺序?
- c++ - 具有动态回调函数类型的 C++ 模板类
- python - pset6 相似之处更多 ...对象不支持项目分配
- python - Python 3.7 - 使用 ctypes 将参数传递给 DLL
- javascript - 在类中使用功能组件