在golang中构建没有github的本地导入

时间:2017-03-13 01:07:56

标签: go

我正在构建一个简单的应用程序,在阅读了关于构建应用程序的文档之后,我仍然感到困惑。

我想要这个结构:

  • 实践
    • 型号(打包为型号)
      • 一个
      • B'/ LI>
    • 路由器(打包为路由器)
      • 一个
      • B'/ LI>

app.go

app.go内,我有以下内容:

package main

import (
    "net/http"

    // I have tried the following:
    "practice/models/a"
    "practice/models/b"
    "practice/models"
    "$GOPATH/practice/models/a"
    "$GOPATH/practice/models/b"
    "$GOPATH/practice/models"
    ...
)

func main() {
    http.HandleFunc("/a", AHandler)
    http.HandleFunc("/b", BHandler)
    http.ListenAndServe(":8080", nil)
}

A和B模型如下所示:

package models

import "net/http"

func AHandler(w http.ResponseWriter, r *http.Request) {
   // code
}

两个问题:

  1. 导入这些文件的正确方法是什么?我是否真的必须将它们推送到github以便能够引用它们?我知道$ GOPATH是本地机器上整个go工作区的命名空间。我的$ GOPATH设置为包含此目录。

  2. 我是否需要在这些文件中定义主要方法?我可以只导出一个函数并将其作为处理函数吗?

  3. 感谢。

    我咨询了docs

2 个答案:

答案 0 :(得分:6)

请参阅How to Write Go Code

在$ GOPATH / src下创建目录结构。

  • $ GOPATH
    • SRC
      • 实践
        • models
        • 路由器

按如下方式导入包:

import (
  "practice/routers"
  "practice/models"
  ...
)

使用导入的软件包:

func main() {
  http.HandleFunc("/a", models.AHandler)
  http.HandleFunc("/b", models.BHandler)
  http.ListenAndServe(":8080", nil)
}

即使您在文件路径中使用“github.com”,也无需推送到github.com。

主程序包中的主要功能是应用程序的入口点。不要在main之外的包中定义主要功能。

答案 1 :(得分:2)

我认为另一个答案已过时,您不再需要使用 GOPATH。 运行:

go mod init yellow

然后创建一个文件yellow.go

package yellow

func Mix(s string) string {
   return s + "Yellow"
}

然后创建一个文件orange/orange.go

package main
import "yellow"

func main() {
   s := yellow.Mix("Red")
   println(s)
}

然后构建:

go build

https://golang.org/doc/code.html