Import 如何使用自定义软件包
我正在尝试在Go中创建和使用自定义包。这可能是非常明显的事情,但我找不到太多关于这方面的信息。基本上,我将这两个文件放在同一个文件夹中: mylib.goImport 如何使用自定义软件包,import,package,go,Import,Package,Go,我正在尝试在Go中创建和使用自定义包。这可能是非常明显的事情,但我找不到太多关于这方面的信息。基本上,我将这两个文件放在同一个文件夹中: mylib.go package mylib type SomeType struct { } package main import ( "mylib" ) func main() { } main.go package mylib type SomeType struct { } package main import (
package mylib
type SomeType struct {
}
package main
import (
"mylib"
)
func main() {
}
main.go
package mylib
type SomeType struct {
}
package main
import (
"mylib"
)
func main() {
}
当我尝试运行main.go时,出现以下错误:
main.go:4:2: import "mylib": cannot find package
我尝试先运行
go build mylib.go
,但它似乎什么都没做(没有生成文件,没有错误消息)。你知道我该怎么做吗?首先,一定要阅读并理解文档
实际答案取决于“定制包”的性质
如果是一般用途,考虑采用所谓的。基本上,您可以将库作为一个单独的
go-get
-table项目
如果您的库供内部使用,您可以这样做:
src/
myproject/
mylib/
mylib.go
...
main.go
现在,在顶级的
main.go
中,您可以导入“myproject/mylib”
,它将正常工作。对于这种文件夹结构:
main.go
mylib/
mylib.go
最简单的方法是使用:
import (
"./mylib"
)
另一种解决方案:将
src/myproject
添加到$GOPATH
然后,
导入“mylib”
将编译。对于GitHub上托管的项目,人们通常会这样做:
github.com/
laike9m/
myproject/
mylib/
mylib.go
...
main.go
mylib.go
package mylib
...
梅因,加油
import "github.com/laike9m/myproject/mylib"
...
我是一个有经验的程序员,但是,对围棋世界来说还是一个新手!我承认我在理解Go方面遇到了一些困难。。。 当我试图在子文件夹中组织我的go文件时,我遇到了同样的问题。 我的做法是: GO_目录(分配给$GOPATH的目录) 在文件MyProject\Entities\Fiboo\Client.go上
package Fiboo
type Client struct{
ID int
name string
}
在文件MyProject\main.go上
package main
import(
Fiboo "./Entity/Fiboo"
)
var TableClient Fiboo.Client
func main(){
TableClient.ID = 1
TableClient.name = 'Hugo'
// do your things here
}
(我在Ubuntu 16.04上运行Go 1.9)
记住,伙计们,我是个新手。如果我正在做的是不好的练习,让我知道 我尝试了很多方法,但最好的方法是使用go.mod和put
module nameofProject.com
然后我从我使用的同一个项目导入
import("nameofProject.com/folder")
在任何地方创建项目都非常有用对于那些面临此问题的人,您需要先初始化go模块,然后才能使用自定义包
例如,您的代码目录是:
。/mycode/main.go
。现在您需要创建diffcode
自定义包并将其导入到main中。您首先需要运行命令go mod init mycode
(确保您位于。/mycode
目录下)。现在您创建了包diffcode
,其中包含一些文件。要导入此软件包,您需要将其放入main.go
:模块/软件包
。在本例中,mycode/diffcode
我没有设置GOPATH变量,只有GOROOT.rungo install
在mylib
目录下,请先运行,然后重试。另请参见。@Joe,在内部运行“go install”仍然无法工作。这在go的最新版本中不再起作用,因为找不到包。正确的导入应该是foo/mylib
(假设包含main.go的文件夹是foo
)。@nemo,在最新版本的go中,我总是使用“/mylib”,它可以工作。使用go 1.2,我同意@this.lau,请注意这会导致go安装
中断。如果您正在构建一个独立的项目,希望人们下载并在其上运行go build
,这很好——但是,如果您希望获得完整的go install
支持,我会使用上面提到的“Github代码布局”(即使是脱离bitbucket或类似的布局)。我建议不要使用这种方式。是威尔打破了戈迪夫。godef it不了解“.”导入如果我在src/下创建一个新项目(myproject2),我如何导入mylib?@Kiril,你的意思是,你如何在myproject2
的代码中导入mylib
?然后答案是“通过使用import“myproject/mylib”
——其思想是Go在从GOPATH
环境变量中提取的每个目录下搜索导入的路径(它们被称为“工作空间”),但这种搜索(幸运的是)不是递归的,因此这些路径被有效地“锚定”“在各自的工作区。另一个必须阅读:。@MatthiasSommer,通常通过将mylib提取到每个微服务使用的公共包中。“使用”的确切定义取决于您首选的工作流。在企业级开发中,通常使用,但在最近的go mod
开发中,可能就是答案(并且go mod
也支持模块的销售)。@LeiYang,“要导入的包”是一个包含一个或多个go源文件的目录。至于“如何将包构建为.lib文件”,则导入lib文件“-答案取决于你真正想要什么。如果您关心的是编译速度,那么就不用担心了:Go工具链会在每个包的基础上缓存所有构建结果。相反,如果您想询问是否可以编译和分发一个仅二进制编译的包,那么答案是。这对于github托管的包这样的可获取路径不起作用。