如何在GO中导入本地包

如何在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.

我正在创建一个web API

我在同一个文件中构建了服务器和控制器
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
),并且只有在黑盒测试比白盒测试更有用的情况下(在大多数情况下,白盒测试在功能上排除了正确的单元测试)。例如,您可以使用以下设置来验证这一点:。测试文件中定义的全局变量无法从非测试文件访问,并且不包括在最终生成中,尽管它们位于同一个包中。