如何在GO中导入本地包

时间:2017-12-14 11:17:03

标签: go

我正在创建一个Web API。

我在同一个文件main.go中构建了我的服务器和控制器。

我创建了另一个文件名model.go,我在其中声明了一个Person结构。

我无法在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"
)

model.go

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

1 个答案:

答案 0 :(得分:5)

在同一文件夹中,您必须具有相同的包名称。

当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的。