为了账号安全,请及时绑定邮箱和手机立即绑定

我的 main.go 文件看不到其他文件

我的 main.go 文件看不到其他文件

Go
胡子哥哥 2022-01-04 15:50:26
我需要一些帮助来理解我在一个简单的 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()

}


查看完整回答
反对 回复 2022-01-04
?
慕姐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)。

有关更多信息,请查看此链接


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 231 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信