为了账号安全,请及时绑定邮箱和手机立即绑定

在同一个目录中有两个包有意义吗?

在同一个目录中有两个包有意义吗?

Go
翻过高山走不出你 2021-07-07 10:00:12
我有一个项目,它提供了一个库(导出一些函数)并且还必须提供一个命令行界面(必须有一个可执行文件)。目录结构示例:whatever.io/    myproject/        main.go        myproject.gogo 编译器需要包 main和func main才能开始执行。我的图书馆需要myproject 包,我在上面放东西。这是 go 工具在我构建另一个尝试导入 myproject 的项目时所说的:main.go:5:2: found packages myproject (myproject.go) and main (main.go) in $GOPATH/src/whatever.io/myproject所以我相信没有办法做到这一点。我应该将库或 CLI 移动到另一个包吗?
查看完整描述

3 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

只需将您的包移动到 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$ 


查看完整回答
反对 回复 2021-07-12
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

每个目录不能有两个包,因此会出现错误。所以@Larry Battle 所说的解决方案将您移动myproject.go到一个新目录。

从如何编写 go 代码

Go 代码必须保存在工作区中。工作区是一个目录层次结构,其根目录包含三个目录:

src 包含组织成包的 Go 源文件(每个目录一个包),

pkg 包含包对象,以及

bin 包含可执行命令。


查看完整回答
反对 回复 2021-07-12
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

在大多数情况下,没有。但是,单元测试有一个例外。


工作示例:

这是1 个目录 ( )中的 2 个不同的包 (mypackage和)。编译器不会抱怨这个。mypackage_testmypackage


mypackage 文件夹:


mypackage/

  foo.go

  foo_test.go

mypackage/foo.go:


package mypackage


func Add(a int, b int) int {

    return a + b

}

mypackage/foo_test.go:


package mypackage_test


// Unit tests...

规则:

  1. 这两个包必须具有以下名称:

    • 目录名称。

    • NameOfDirectory + _test.

  2. _test包中文件的名称必须以_test.go

如果您收到与 类似的令人困惑的编译器错误found packages "foo" and "bar",则您可能违反了这些规则中的一个或多个。


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信