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

use*_*553 6 go

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

我想要这个结构:

  • 实践
    • 型号(打包成型号)
      • 一个
      • b
    • 路由器(打包为路由器)
      • 一个
      • b

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)
}
Run Code Online (Sandbox Code Playgroud)

A和B型号如下所示:

package models

import "net/http"

func AHandler(w http.ResponseWriter, r *http.Request) {
   // code
}
Run Code Online (Sandbox Code Playgroud)

两个问题:

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

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

谢谢.

我咨询过这些文档

小智 8

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

go mod init yellow
Run Code Online (Sandbox Code Playgroud)

然后创建一个文件yellow.go

package yellow

func Mix(s string) string {
   return s + "Yellow"
}
Run Code Online (Sandbox Code Playgroud)

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

package main
import "yellow"

func main() {
   s := yellow.Mix("Red")
   println(s)
}
Run Code Online (Sandbox Code Playgroud)

然后构建:

go build
Run Code Online (Sandbox Code Playgroud)

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


Cer*_*món 6

请参见如何编写Go代码.

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

  • $ GOPATH
    • SRC
      • 实践
        • 楷模
        • 路由器

导入包如下:

import (
  "practice/routers"
  "practice/models"
  ...
)
Run Code Online (Sandbox Code Playgroud)

像这样使用导入的包:

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

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

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

  • 谢谢!我知道这看起来很简单但是来自动态的鸭式语言在这方面没有帮助.这很有道理.在您的解释之后再次重新阅读文档使它看起来很简单. (2认同)