一尘不染

在同一目录中有两个软件包是否有意义?

go

我有一个提供库的项目(导出一些函数),还必须提供命令行界面(必须有一个可执行文件)。

目录结构示例:

whatever.io/
    myproject/
        main.go
        myproject.go

go编译器需要 包mainfunc main 才能开始执行。我的图书馆需要在上面放东西的 包myproject
。这是我在构建另一个试图导入myproject的项目时go工具所说的:

main.go:5:2: found packages myproject (myproject.go) and main (main.go) in $GOPATH/src/whatever.io/myproject

因此,我相信没有办法。

我应该将库或CLI移至另一个软件包吗?


阅读 222

收藏
2020-07-02

共1个答案

一尘不染

只需将软件包移动到main.go相同目录中的新文件夹中即可。记住要从$ GOPATH的引用中导入新包。

例:

user@user:~/p/go/test/so-multipack$ ls -R
.:
a  main.go

./a:
a.go
user@user:~/p/go/test/so-multipack$ cat main.go 
package main

import (
    "../so-multipack/a"
)
func main(){
    a.Hello()
}
user@user:~/p/go/test/so-multipack$ cat a/a.go 
package a
import (
    "fmt"
)
func Hello(){
    fmt.Println("hello from a")
}
user@user:~/p/go/test/so-multipack$ go run main.go 
hello from a
user@user:~/p/go/test/so-multipack$ go build 
user@user:~/p/go/test/so-multipack$ ls
a  main.go  so-multipack
user@user:~/p/go/test/so-multipack$
2020-07-02