首页 > 解决方案 > 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")
}

标签: go

解决方案


因为jsonparser.gomain.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

推荐阅读