我需要一些幫助來理解我在一個簡單的 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 關注
- 257 瀏覽
添加回答
舉報
0/150
提交
取消