如何在GO中导入本地包
我正在创建一个web API 我在同一个文件中构建了服务器和控制器如何在GO中导入本地包,go,Go,我正在创建一个web API 我在同一个文件中构建了服务器和控制器main.go 我创建了另一个文件名model.go,其中我声明了一个Personstruct 我无法在main.go中导出我的模型 每次运行或生成时都会出现以下错误: can't load package: package .: found packages main 有没有办法导出func/const并将其导入到具有良好路径的文件中?(就像JavaScript的工作方式一样) 这是我的树: myapp/ --main.
main.go
我创建了另一个文件名model.go
,其中我声明了一个Person
struct
我无法在main.go中导出我的模型
每次运行或生成时都会出现以下错误:
can't load package: package .: found packages main
有没有办法导出func/const并将其导入到具有良好路径的文件中?(就像JavaScript的工作方式一样)
这是我的树:
myapp/
--main.go/
--model.go/
这是我的导入:
main.go
package main
import (
"encoding/json"
"log"
"net/http"
"./person"
"github.com/gorilla/mux"
)
package person
type Person struct {
ID string `json:"id,omitempty"`
Firstname string `json:"firstname,omitempty"`
Lastname string `json:"lastname,omitempty"`
Address *Address `json:"address,omitempty"`
}
var people []Person
型号。开始
package main
import (
"encoding/json"
"log"
"net/http"
"./person"
"github.com/gorilla/mux"
)
package person
type Person struct {
ID string `json:"id,omitempty"`
Firstname string `json:"firstname,omitempty"`
Lastname string `json:"lastname,omitempty"`
Address *Address `json:"address,omitempty"`
}
var people []Person
在同一文件夹中,您必须具有相同的包名
当golang处理导入时,它会将同一目录下的所有文件作为一个整体加载
根据您提供的代码,model.go包名必须是main
您不需要从main.go导入model.go
现在,有一件事要知道。当您运行go build/run/install时,它将使用作为参数传递的文件列表来初始化生成过程
在当前设置中,这意味着您必须将构成主包的所有文件传递到命令行,否则,它们将被忽略,在您的情况下,这意味着生成失败
在纯文本中,您将执行go build*.go
而不是go build main.go
将来,如果希望避免生成多个源文件,则应具有唯一的main.go,其中包含用于初始化正在编写的程序的最少代码。因此,model.go
的内容将存在于不同的包(目录)中,并将通过import xyz
语句导入main
最后,import
指令的导入路径不得与当前工作目录相关。它们都基于GOPATH/src
。这不是包的工作方式。阅读如何编写Go代码并坚持下去(不要争论)。导入包(基本上是整个文件系统文件夹)而不是文件。同样重复,然后是10次。值得注意的是,导入路径可以是相对的,但是相对导入路径,虽然可能,但永远不应该被使用。永远~~在主程序包中,可能还可以,但实践不好。此外,测试将在同一文件夹中使用不同的包名。测试可以在同一文件夹中使用不同的包名,但只能使用非常特定的模式(packagename\u test
),并且只有在黑盒测试比白盒测试更有用的情况下(在大多数情况下,白盒测试在功能上排除了正确的单元测试)。例如,您可以使用以下设置来验证这一点:。测试文件中定义的全局变量无法从非测试文件访问,并且不包括在最终生成中,尽管它们位于同一个包中。