go run的一個小細節

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Golang的一個優勢就是編譯快,可以當指令碼語言使用,利用go run直接執行.go檔案,就像執行指令碼一樣。

我很喜歡這點,一般都懶得build。但在嘗試beego(https://github.com/astaxie/beego)架構時,剛照著寫了個hello world,總是不對,提示找不到模版。

開始了漫長的調試,查看原始碼、修改配置、、、各種不行。

2013/05/01 10:03:11 [C] [Handler crashed with error can't find templatefile in the path:index.tpl]
2013/05/01 10:03:11 [C] [/build/buildd/golang-1/src/pkg/runtime/proc.c 1443]
2013/05/01 10:03:11 [C] [/usr/lib/go/src/pkg/github.com/astaxie/beego/controller.go 178]
2013/05/01 10:03:11 [C] [/usr/lib/go/src/pkg/github.com/astaxie/beego/controller.go 92]
2013/05/01 10:03:11 [C] [/usr/lib/go/src/pkg/reflect/value.go 521]
2013/05/01 10:03:11 [C] [/usr/lib/go/src/pkg/reflect/value.go 334]
2013/05/01 10:03:11 [C] [/usr/lib/go/src/pkg/github.com/astaxie/beego/router.go 375]
2013/05/01 10:03:11 [C] [/usr/lib/go/src/pkg/net/http/server.go 656]
2013/05/01 10:03:11 [C] [/build/buildd/golang-1/src/pkg/runtime/proc.c 271]

那調試下吧:

go build main.go

gdb  ./main

run

居然好了。

直接執行 ./main,也好的。

再看了遍相關代碼,beego裡找配置、模版等檔案都是從當前執行目錄下尋找相關子目錄。

beego.go 48: AppPath, _ = os.Getwd()

懷疑是不是go run的執行路徑不是當前路徑。

察看下go run的協助:

go help run
usage: go run [build flags] gofiles... [arguments...]
Run compiles and runs the main package comprising the named Go source files.
For more about build flags, see 'go help build'.
See also: go build.

看這個意思,就是自動編譯+運行。。。

首先懷疑的是,這個路徑是不是go工具所在路徑。

驗證:

go run ./main.go

ps 下,恩哼,a.out哪來的?

49391 pts/1    00:00:00 go
49399 pts/1    00:00:00 a.out

看下詳細的:

0  1000 49391 42236  20   0  66416  5204 ffffff Sl+  pts/1      0:00 go run ./main.go
0  1000 49399 49391  20   0 146000  4272 ffffff Sl+  pts/1      0:00 /tmp/go-build402905850/command-line-arguments/_obj/a.out

這裡就很清楚了,go run 命令其實就是跑到 /tmp目錄建立個 /go-buildxxxx目錄,編譯然後運行。

這個可能會帶來個小問題,

1. 如果依賴相對路徑的檔案的話,就像上面的,就會有問題;

2. 如果不斷執行,就會不斷的產生新的臨時檔案。

所以golang當指令碼用的時候要注意下。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.