你好,戈兰的世界

我正在关注官方的 Go 教程:https ://golang.org/doc/code.html


但我没有通过命令行做事,而是使用 GoLand。当所有内容都包含在 HelloWorld.go 包中时,我能够运行程序并看到打印的“Hello World”,但是当我添加 morestrings 包并尝试将其导入 HelloWorld.go 时,我收到导入错误(Cannot resolve file 'morestrings'):


package main


import (

    "morestrings"

    "fmt"

)


func main() {

    fmt.Println(morestrings.ReverseRunes("!oG ,olleH"))

}

这是我定义的morestrings包:


package morestrings


// ReverseRunes returns its argument string reversed rune-wise left to right.

func ReverseRunes(s string) string {

    r := []rune(s)

    for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {

        r[i], r[j] = r[j], r[i]

    }

    return string(r)

}

我已将GOPATH项目设置设置为项目的根目录 ( GoGoHelloWorld)。我的理解是 Go 会查找从 开始的导入GOPATH,所以我希望它会找到 morestrings 包。这是文件结构:

http://img.mukewang.com/629da8730001319a02650279.jpg

白衣染霜花
浏览 146回答 3
3回答

长风秋雁

如果你的 go 路径是 GOPATH=/Users/.../IdeaProjects/FinalGoHelloWorld。我假设您已经在“FinalGoHelloWorld”中创建了一个项目“GoGoHelloWorld”。您的导入语句错误,您应该使用“GoGoHelloWorld/src/morestrings”

墨色风雨

当您尝试在 GO 中导入包时,它不会在整个文件系统中的任何地方查找该包,它会在特定文件夹中查找该包。这些文件夹是src您的GOROOTandGOPATH目录中的文件夹。您的所有代码都应该放在 thisGOPATH的src文件夹中。你在评论部分提到GOPATH=/Users/.../IdeaProjects/FinalGoHelloWorld。所以你必须在这个目录中创建一个src文件夹,所有的代码都在里面src。所以你的GoGoHelloWorld文件夹的完整路径必须是/Users/.../IdeaProject/FinalGoHelloWorld/src/GoGoHelloWorld,所以现在你的导入应该看起来更像import&nbsp;(&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;"GoGoHelloWorld/src/morestrings" &nbsp;&nbsp;&nbsp;&nbsp;"fmt" &nbsp;&nbsp;&nbsp;&nbsp;)作为参考,由于您的 GOROOT 是GOROOT=/usr/local/go您的 fmt 包(文件夹)将位于/usr/local/go/src/fmt我还建议将GOPATH文件夹名称从更改FinalGoHelloWorld为更通用的名称,例如GoWorkspace.&nbsp;所以在里面GoWorkspace/src你可以创建多个具有特定名称的项目文件夹。最后一件事,再创建两个文件夹,bin以及pkg,以及src里面GOPATH

catspeake

首先,我认为您可以看一下这个go 项目布局,它可能与 C++ 或 Java 等其他语言不同。其次,我想使用 go 模块。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go