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

我需要一些帮助来理解我在一个简单的 Web 应用程序中的文件布局有什么问题。


$GOPATH/src/example.com/myweb

然后我有2个文件:


$GOPATH/src/example.com/myweb/main.go

$GOPATH/src/example.com/myweb/api.go

两个文件都有:


包主


api.go 文件如下所示:


package main


import (

    "bytes"

    "encoding/json"

    "fmt"

    "io"

    "net/http"

    "time"

)


type API struct {

    URI   string

    Token  string

    Secret string

    client *http.Client

}


...

我的 main.go 文件如下所示:


package main


import (

    "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 个文件有主文件吗?


胡子哥哥
浏览 232回答 2
2回答

慕桂英3389331

您只编译 main.go 文件。你应该使用:go run main.go api.go或者:go run *.go如果您正在编写一个复杂的应用程序,您可能会将所有内容添加到子目录中的包中,并拥有一个 main.go 文件。例如,etcd有一个etcdmain子目录/包以及其他子目录/包。就像是:/alarm    /auth/cmd/etcdmain...而 main.go 文件很简单:package mainimport "github.com/coreos/etcd/etcdmain"func main() {    etcdmain.Main()}

慕姐4208626

您正在使用 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)。有关更多信息,请查看此链接。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go