一如既往的喜歡用idea的 "Run", 但是在某個(gè)項(xiàng)目中竟然跑不起來了.
# command-line-arguments
.\main.go:253: undefined: service
然后我又在命令行了試了一下 go build, 發(fā)現(xiàn)是正常的, 奇怪了, 雖然能build在執(zhí)行, 但是沒idea中run來得方便啊, 不能忍, 所以開始研究之旅 .
首先 我的項(xiàng)目結(jié)構(gòu)是這樣的:
看 go help
第一懷疑的是自己用法不對(duì), 敲 go help run
go help run
usage: go run [build flags] [-exec xprog] gofiles... [arguments...]
...
For more about build flags, see 'go help build'.
首先想到的是 build flags參數(shù), 是不是有什么其他的參數(shù)沒配置對(duì), 先看看參數(shù)的使用吧.
go help build
The build flags are shared by the build, clean, get, install, list, run,
and test commands:
-n
print the commands but do not run them.
...(省略1w字)
好像參數(shù)都和那undefined無關(guān), 沒辦法了, -n看看run和build的commands有什么不同, 導(dǎo)致了一個(gè)正確一個(gè)錯(cuò)誤.
go build -n(只截取了重要部分)
"D:\\dev\\Go\\pkg\\tool\\windows_amd64\\compile.exe" -o "$WORK\\room.a" -trimpath $WORK -p main -complete -buildid 9818a29629bab0107dd87d443f6410ca199b11b0 -importmap github.com/Shopify/sarama=vendor/github.com/Shopify/sarama -im
portmap github.com/Sirupsen/logrus=vendor/github.com/Sirupsen/logrus -importmap github.com/doublemo/koala/cluster=vendor/github.com/doublemo/koala/cluster -importmap github.com/doublemo/koala/db/mongodb=vendor/github.com/doublemo
/koala/db/mongodb -importmap github.com/doublemo/koala/helper=vendor/github.com/doublemo/koala/helper -importmap github.com/doublemo/koala/kafka=vendor/github.com/doublemo/koala/kafka -importmap github.com/doublemo/koala/kafka/ho
ok=vendor/github.com/doublemo/koala/kafka/hook -importmap github.com/doublemo/koala/os/stats=vendor/github.com/doublemo/koala/os/stats -importmap github.com/doublemo/koala/svc=vendor/github.com/doublemo/koala/svc -importmap golan
g.org/x/net/context=vendor/golang.org/x/net/context -importmap google.golang.org/grpc=vendor/google.golang.org/grpc -importmap gopkg.in/urfave/cli.v2=vendor/gopkg.in/urfave/cli.v2 -importmap gopkg.in/urfave/cli.v2/altsrc=vendor/g
opkg.in/urfave/cli.v2/altsrc -D _/E_/go_project/koal/src/room -I $WORK -I "E:\\go_project\\koal\\pkg\\windows_amd64" -pack "E:\\go_project\\koal\\src\\room\\main.go" "E:\\go_project\\koal\\src\\room\\service.go"
go run -n main.go
"D:\\dev\\Go\\pkg\\tool\\windows_amd64\\compile.exe" -o "$WORK\\command-line-arguments.a" -trimpath $WORK -p main -complete -buildid 2c633397042ad253e002d08263af62f3d95c0754 -importmap github.com/Shopify/sarama=vendor/github.com/
Shopify/sarama -importmap github.com/Sirupsen/logrus=vendor/github.com/Sirupsen/logrus -importmap github.com/doublemo/koala/cluster=vendor/github.com/doublemo/koala/cluster -importmap github.com/doublemo/koala/db/mongodb=vendor/g
ithub.com/doublemo/koala/db/mongodb -importmap github.com/doublemo/koala/kafka=vendor/github.com/doublemo/koala/kafka -importmap github.com/doublemo/koala/kafka/hook=vendor/github.com/doublemo/koala/kafka/hook -importmap github.c
om/doublemo/koala/os/stats=vendor/github.com/doublemo/koala/os/stats -importmap github.com/doublemo/koala/svc=vendor/github.com/doublemo/koala/svc -importmap google.golang.org/grpc=vendor/google.golang.org/grpc -importmap gopkg.i
n/urfave/cli.v2=vendor/gopkg.in/urfave/cli.v2 -importmap gopkg.in/urfave/cli.v2/altsrc=vendor/gopkg.in/urfave/cli.v2/altsrc -D _/E_/go_project/koal/src/room -I $WORK -I "E:\\go_project\\koal\\pkg\\windows_amd64" -pack "E:\\go_pro
ject\\koal\\src\\room\\main.go"
我細(xì)(cou)心(qiao)的發(fā)現(xiàn)了最后一句話的不同. build -pack了兩個(gè)文件, run 只-pack了一個(gè)文件, 而報(bào)錯(cuò)的地方正是run沒有-pack進(jìn)來的文件, 那么真相只有一個(gè) : 那就是run沒有-pack進(jìn)來package(main) 的所有文件, 導(dǎo)致直接go run main.go, 找不到其他文件下的東西. 問題找到了, 怎么解決呢?
再看go help
那么 怎么能讓go run包含多個(gè)文件進(jìn)來呢?
go help run
usage: go run [build flags] [-exec xprog] gofiles... [arguments...]
看到gofiles...了嗎, 看到熟悉的...了嗎? 是的, go run可以傳多個(gè)文件 如: go run a.go b.go c.go. 打開命令行, 一試 好了 ! 好像又離解決問題近了一步.
小插曲是我天真的試了下
go run *.go
.
修改idea run配置
我是相信idea的強(qiáng)大的, run多個(gè)文件的問題它肯定能解決;
首先看看run配置
這里要是能配置多個(gè)文件應(yīng)該就可以, 然后并不能.
那算了, 刪了再來, 這一次我們build and run
然后點(diǎn)擊
依然有一個(gè)file選項(xiàng), 依然是不能多選的...
不過上面還有一個(gè)Run kind, 點(diǎn)一下出現(xiàn)了package: 運(yùn)行整個(gè)包,而不是單一個(gè)文件? 好像有希望, 輸入room, 試一試, 果然跑起來了 .