我正在尝试在Go中创建和使用自定义程序包。这可能是非常明显的事情,但我找不到太多关于此的信息。基本上,我将这两个文件放在同一个文件夹中:
mylib.go
package mylib
type SomeType struct {
}
main.go
package main
import (
"mylib"
)
func main() {
}
当我尝试go run main.go
时,我收到此错误:
main.go:4:2: import "mylib": cannot find package
我尝试先运行go build mylib.go
但它似乎没有做任何事情(没有生成文件,没有错误信息)。所以我知道如何做到这一点?
答案 0 :(得分:157)
首先,请务必阅读并理解"How to write Go code"文档。
实际答案取决于“自定义套餐”的性质。
如果它是一般用途,请考虑使用所谓的"Github code layout"。基本上,您将库设为单独的go get
- 表项目。
如果您的图书馆供内部使用,您可以这样:
演示:
src/
myproject/
mylib/
mylib.go
...
main.go
现在,在顶级main.go
,您可以import "myproject/mylib"
,它可以正常运作。
答案 1 :(得分:58)
对于这种文件夹结构:
main.go
mylib/
mylib.go
最简单的方法是使用它:
import (
"./mylib"
)
答案 2 :(得分:6)
对于在GitHub上托管的项目,以下是人们通常做的事情:
github.com/
laike9m/
myproject/
mylib/
mylib.go
...
main.go
mylib.go
package mylib
...
main.go
import "github.com/laike9m/myproject/mylib"
...
答案 3 :(得分:4)
我是一名经验丰富的程序员,但对Go世界来说还是新手!我承认,我很难理解Go ...... 当我尝试在子文件夹中组织我的go文件时,我遇到了同样的问题。 我这样做的方式:
GO_Directory(分配给$ GOPATH的那个)
GO_Directory //the one assigned to $GOPATH
__MyProject
_____ main.go
_____ Entites
_____ Fiboo // in my case, fiboo is a database name
_________ Client.go // in my case, Client is a table name
在文件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的新手。如果我正在做的是不好的做法,请告诉我!
答案 4 :(得分:3)
另一种解决方案:
将src/myproject
添加到$ GOPATH。
然后import "mylib"
将编译。
答案 5 :(得分:1)
我尝试了很多方法,但最好的方法是使用go.mod并放置
module nameofProject.com
然后从我使用的同一项目中导入
import("nameofProject.com/folder")
在任何地方创建项目非常有用
答案 6 :(得分:0)
包lexico
type Analizador struct {
}
func main() {
}
En la clase 包主要
import (
"github.com/user/lexico
)
答案 7 :(得分:0)
遇到这个问题的人,需要先初始化go模块,然后才能使用自定义包。
例如您的代码目录是:../mycode/main.go
。现在您要创建 diffcode
自定义包并将其导入主程序。您首先需要运行命令 go mod init mycode
(确保您位于 ../mycode
目录下)。现在您创建包 diffcode
并且它有一些文件。要导入此包,您需要将其放入 main.go
: module/package
。在这种情况下,mycode/diffcode
。