~/src/go-statsd-client> echo $GOPATH
/Users/me/gopath
~/src/go-statsd-client> echo $GOROOT
/usr/local/Cellar/go/1.1.1\
~/src/go-statsd-client> go install
go install: no install location for directory /Users/me/src/go-statsd-client outside GOPATH
Run Code Online (Sandbox Code Playgroud)
无论项目采用何种结构,总是会失败并显示相同的消息.Go build非常有效.
这是我的 go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/me/gopath"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.1.1"
GOTOOLDIR="/usr/local/Cellar/go/1.1.1/pkg/tool/darwin_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
CGO_ENABLED="1"
Run Code Online (Sandbox Code Playgroud)
这是在Mac OSX Mountain Lion上,并且安装了自制软件.
我目前在我的主程序包中有一个名为的文件main.go.如何在main.go不创建单独的包的情况下将内容拆分为多个文件,因为代码不可重用.
我想要一个像这样的目录结构:
$ ls foo
main.go
bar.go
Run Code Online (Sandbox Code Playgroud)
bar.go
package main
import "fmt"
func Bar() {
fmt.Println("Bar")
}
Run Code Online (Sandbox Code Playgroud)
然后进去 main.go
package main
func main() {
Bar()
}
Run Code Online (Sandbox Code Playgroud)
但是go run main.go给了我:
# command-line-arguments
./main.go:4:2: undefined: Bar
Run Code Online (Sandbox Code Playgroud) 我是新手去处理我想要本地化的示例代码.
在原始的main.go进口声明中它是:
import (
"log"
"net/http"
"github.com/foo/bar/myapp/common"
"github.com/foo/bar/myapp/routers"
)
Run Code Online (Sandbox Code Playgroud)
现在我已经common和routers包/home/me/go/src/myapp
所以我将import语句转换为:
import (
"log"
"net/http"
"./common"
"./routers"
)
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时,go install myapp我得到了这些错误:
can't load package: /home/me/go/src/myapp/main.go:7:3: local import "./common" in non-local package
Run Code Online (Sandbox Code Playgroud)
此外,当我使用common和routers替代./common和./routers在import语句,我得到:
myapp/main.go:7:3: cannot find package "common" in any of:
/usr/local/go/src/common (from $GOROOT)
/home/me/go/src/common (from $GOPATH)
myapp/main.go:8:2: cannot find package "routers" in any of:
/usr/local/go/src/routers (from $GOROOT)
/home/me/go/src/routers (from $GOPATH)
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
我是Go的新人.我非常喜欢这种语言,但我很快意识到由于程序大小的增加,我需要开始分割文件.
go run main.go (main.go是我的main()函数的文件)
没有工作,我打了一段时间的障碍,因为我不知道如何使我的程序工作.
一些快速搜索引导我得到答案
go run main.go other.go ..
通过键入我所package main包含的所有文件,我可以运行编程.然而,每次这样做都非常麻烦和令人沮丧.
我写了以下自我回答的问题,以防止像我这样可能再次遇到这个障碍的人.
我试图了解如何使用go1.11模块来组织我的golang项目。我尝试了几种选择,但没有一个起作用。
我在主程序包和应用程序文件夹中有一些代码,以及主程序包使用的本地程序包。
$GOPATH
+ src
+ application/
+ main/
+ main.go
+ otherFileUnderMainPackage.go
+ aLocalPackage/
+ someCode.go
+ someCode_test.go
+ someMoreCode.go
+ someMoreCode_test.go
Run Code Online (Sandbox Code Playgroud)
主包中的文件import ../aLocalPackage。当我编译时,go build main/*.go它正在工作。
然后,我运行go mod init application:V.0.9.9并获得了go.mod文件,但是构建始终失败。我总是会因找不到本地软件包而出错:build application:V0.9.9/main: cannot find module for path _/.../src/application/aLocalPackage。我还尝试将本地程序包放在src /下,将其放在main /下,等等,但是这些方法都不适合我。
使用模块和本地包的方式是什么?
谢谢。