我正在构建一个简单的应用程序,在阅读了关于构建应用程序的文档之后,我仍然感到困惑。
我想要这个结构:
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
}
两个问题:
导入这些文件的正确方法是什么?我是否真的必须将它们推送到github以便能够引用它们?我知道$ GOPATH是本地机器上整个go工作区的命名空间。我的$ GOPATH设置为包含此目录。
我是否需要在这些文件中定义主要方法?我可以只导出一个函数并将其作为处理函数吗?
感谢。
我咨询了docs
答案 0 :(得分:6)
在$ GOPATH / src下创建目录结构。
按如下方式导入包:
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