我需要一些帮助来理解我在一个简单的 Web 应用程序中的文件布局有什么问题。$GOPATH/src/example.com/myweb然后我有2个文件:$GOPATH/src/example.com/myweb/main.go$GOPATH/src/example.com/myweb/api.go两个文件都有:包主api.go 文件如下所示:package mainimport ( "bytes" "encoding/json" "fmt" "io" "net/http" "time")type API struct { URI string Token string Secret string client *http.Client}...我的 main.go 文件如下所示:package mainimport ( "github.com/gorilla/mux" "html/template" "net/http")var ( templates = template.Must(template.ParseFiles("views/home.html", "views/history.html", "views/incident.html")) api = API{ URI: "http://localhost:3000", Token: "abc", Secret: "123", })func renderTemplate(w http.ResponseWriter, tmpl string, hp *HomePage) {....}func WelcomeHandler(w http.ResponseWriter, r *http.Request) {....}func main() { r := mux.NewRouter() r.HandleFunc("/", WelcomeHandler) r.PathPrefix("/assets/").Handler( http.StripPrefix("/assets/", http.FileServer(http.Dir("assets/")))) http.ListenAndServe(":9000", r)}在我排除的代码中,我基本上使用在我的 api.go 文件中定义的结构,并且在执行以下操作时出现此错误:go run main.go# command-line-arguments./main.go:16: undefined: API./main.go:23: undefined: User我到底做错了什么?我尝试将 api.go 中的包名称更改为 myweb 但这没有帮助。我应该使用包名 myweb 吗?假设只有 1 个文件有主文件吗?
2 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
您只编译 main.go 文件。你应该使用:
go run main.go api.go
或者:
go run *.go
如果您正在编写一个复杂的应用程序,您可能会将所有内容添加到子目录中的包中,并拥有一个 main.go 文件。例如,etcd有一个etcdmain子目录/包以及其他子目录/包。就像是:
/alarm
/auth
/cmd
/etcdmain
...
而 main.go 文件很简单:
package main
import "github.com/coreos/etcd/etcdmain"
func main() {
etcdmain.Main()
}
慕姐4208626
TA贡献1852条经验 获得超7个赞
您正在使用 golang 工作区项目,这对您的应用程序结构有好处,而且还标准化。
当我们使用 golang 工作区时,您不能运行单个 go 文件。您需要调用 go build / go install。
安装
go install example.com/myweb
上面的命令将在 example.com/myweb 上编译您的主包。并且 myweb 可执行二进制文件将被放置在 GOPATH/bin 中。您可以手动运行它。
建造
go build example.com/myweb
该命令与 go install 类似,但是当您调用该命令时,二进制可执行文件将放置在当前目录中,而不是 GOPATH/bin(除非您的当前目录是 GOPATH/bin)。
有关更多信息,请查看此链接。
- 2 回答
- 0 关注
- 231 浏览
添加回答
举报
0/150
提交
取消