我喜歡jetbrains系列的IDE+go插件。不過我要說的是這個問題主要看你的觀點(diǎn)如何。
創(chuàng)新互聯(lián)公司憑借專業(yè)的設(shè)計(jì)團(tuán)隊(duì)扎實(shí)的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都10年的網(wǎng)站建設(shè)設(shè)計(jì)經(jīng)驗(yàn),為成都上千多家中小型企業(yè)策劃設(shè)計(jì)了網(wǎng)站。
說eclipse:
構(gòu)建方式是使用go install 命令,每一次編譯運(yùn)行都是go install。這樣的好處就是如果你有很多的包,下載下來并沒有編譯,這樣每次編譯速度是很快的。而且(!)go install 符合go官方的項(xiàng)目結(jié)構(gòu),官方說過了,一個go的項(xiàng)目應(yīng)該是以個gopath,包含src,pkg,bin三個主要目錄。所以說go install個人認(rèn)為才是主要的go編譯方式。
說eclipse的缺點(diǎn):
其實(shí)eclipse插件的go編譯方式,還有目錄結(jié)構(gòu),項(xiàng)目結(jié)構(gòu),都是非常完美的?。。?!真的很完美!可是,他的代碼提示,太差件!大括號都不能自動補(bǔ)全,gdb 32bit 64bit兼容問題,eclipseC++ 沒有html js插件,需要手動安裝,幾乎不能開箱即用。不過如果你是開發(fā)算法,數(shù)據(jù)處理,還是推薦eclipse的,畢竟其他都無關(guān)緊要。
說jetbrains:
說先說clione肯定不適合,新建項(xiàng)目沒有向?qū)?,?dǎo)致改成go項(xiàng)目各種不開心,比如圖標(biāo)對于我來說就無法接受go lib 不是小耗子~這是次要的,重要的是各個文件都是灰色的(沒有在cmake中包含的結(jié)果),然后說剩下的,phpstorm這個不說了,估計(jì)很少有人插件按在這里,webstorm,體驗(yàn)也不是很好,idea?體驗(yàn)很好,可是畢竟比較重,尤其是現(xiàn)在加入了自家的K啥玩意(無意冒犯,沒記住單詞)~可是話說回來,go跟C系列IDE配合才是最佳,跟java系列一點(diǎn)不搭關(guān)系,用idea似乎有點(diǎn)格格不入,但是!idea支持新建項(xiàng)目向?qū)?,lib的圖標(biāo)也很清晰,最后還是選擇idea吧,期待clion的強(qiáng)大起來!
再說jetbrains系列缺點(diǎn):
插件的構(gòu)建方式是go buiild 這個讓人很不爽,我們幾乎不確定會構(gòu)建到什么地方去,還要每次設(shè)置一下run配置。這個可能無關(guān)緊要,畢竟不是什么大的毛病,可是go build不能緩存.a文件,直接構(gòu)建的結(jié)果就是很多第三方包的情況下很慢!所以建議安裝包的時候手動install 一下解決這個問題。自帶代碼格式化,這個格式化跟go 格格不入,總的來說就是蛋疼,心碎,菊花癢。
最后說liteIDE:
輕量級IDE,我可以說是國人GO偉大作品典范,然而默認(rèn)構(gòu)建也是go build,項(xiàng)目管理方式不符合go官方標(biāo)準(zhǔn)。代碼提示不能自動導(dǎo)入(eclipse也不能),不過如果你的項(xiàng)目是以包為單位的,那么另當(dāng)別論。一定很不錯,畢竟是輕量級專門針對GO的IDE!
說這些,其實(shí)還有很大一部分取決于你的項(xiàng)目是用vendor機(jī)制管理,還是godeps機(jī)制管理依賴關(guān)系。go不像java擁有強(qiáng)大的幾乎天下一統(tǒng)的maven(無意冒犯,暫不評價其他構(gòu)建套件)。
go沒有官方包倉庫。
go沒有官方包管理工具。
go沒有官方自動化構(gòu)建套件。
上面三個沒有是致命要害。導(dǎo)致民間各種百花齊放。
說說我的項(xiàng)目怎么管理
gpm 一個shell工具(windows下你可以用git的bash,或者cygwin~)
我是嚴(yán)格艷照官方推薦方式管理go項(xiàng)目,一個go項(xiàng)目一個gopath。系統(tǒng)的gopath只是為了安裝go命令,我沒有配置gobin,意義不大。
項(xiàng)目的依賴跟我的代碼包都在src下(非vendor)
vendor用來存放包的特殊依賴,發(fā)布項(xiàng)目直接把依賴包發(fā)布上去(公網(wǎng)管理則只上傳依賴關(guān)系文件 godeps文件)
資源文件等都放在src目錄同級,編譯文件放在bin,引用直接../引用。
在正常的測試中,當(dāng)我們需要進(jìn)行接口測試時,通常使用接口調(diào)試工具,如postman進(jìn)行接口測試
目前我在嘗試使用Go語言進(jìn)行接口測試,使用的庫均為Go自帶的庫。
注:當(dāng)前采用的接口為時事新聞接口,每天可以請求100次,需要的同學(xué),可以自行使用。
delve 是go語言的調(diào)試器,delve的目標(biāo)是為go提供一個簡潔、功能齊全的debug工具,delve易于調(diào)用和使用。
為了能夠編譯delve,需要安裝Go 1.10或更高版本
安裝好go后,直接go get即可安裝,更多安裝教程見:
go get github.com/go-delve/delve/cmd/dlv
安裝好后,在終端執(zhí)行dlv或者dlv help 會看到dlv的幫助信息,則說明安裝成功
dlv常用命令
delve的目標(biāo)是成為一個簡潔而強(qiáng)大的工具。但如果你不習(xí)慣在編譯語言中使用源碼調(diào)試,則可能令人困惑。本文檔將提供開始調(diào)試go程序所需的全部信息。
調(diào)試?yán)映绦蛉缦?/p>
├── go.mod
├── go.sum
├── main.go
├── test
└── utils
├── util.go
└── util_test.go
調(diào)試程序主要有三個文件,main.go、util.go、util_test.go,內(nèi)容如下,比較簡單,go包管理工具使用的是go module,模塊名為test
在vscode debug 的設(shè)置中配置launch.json文件
mode 設(shè)置為debug時,program的內(nèi)容${fileDirname}即可,mode 設(shè)置為exec時,program的值為二進(jìn)制文件的路徑,通過設(shè)置mode的值,即可調(diào)試源碼和二進(jìn)制程序(也需要有源碼)。mode模式為auto時,測試了下,vscode 并不能通過program的內(nèi)容來判斷是debug還是exec
遠(yuǎn)程調(diào)試時,需要在遠(yuǎn)程也有源碼、二進(jìn)制包和dlv工具
在遠(yuǎn)端執(zhí)行dlv命令
dlv debug --headless --listen=:8989 --api-version=2 --accept-multiclient #用degbug方式啟動遠(yuǎn)程應(yīng)用程序
dlv exec --headless --listen=:8989 ./test --api-version=2 --accept-multiclient # exec執(zhí)行當(dāng)前目錄下的test二進(jìn)制文件
--listen:指定調(diào)試端口
--api-version:指定api版本,默認(rèn)是1
--accept-multiclient:接受多個client調(diào)試
在vscode中線下好源碼,和遠(yuǎn)端的源碼結(jié)構(gòu)一致。launch.json配置如下:
在vscode中打好斷點(diǎn)后,就可以進(jìn)行遠(yuǎn)程調(diào)試了
可以去DELVE官網(wǎng)進(jìn)行下載。
關(guān)于delve工具的介紹,這里簡單給大家介紹一下。
delve在go項(xiàng)目及應(yīng)用的開發(fā)中可以用來追蹤程序中的異常代碼,也可以通過打日志的方式追查問題,但是更重要也是非常厲害的一點(diǎn),就是delve可以直接分析程序執(zhí)行的情況。這一點(diǎn)在后期或線上的問題排查中無疑是提供了一個非常大的便捷。
Go(又稱?Golang)是?Google?的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型語言。
Go 語言語法與?C?相近,但功能上有:內(nèi)存安全,GC(垃圾回收),結(jié)構(gòu)形態(tài)及 CSP-style?并發(fā)計(jì)算。
Go的語法接近C語言,但對于變量的聲明有所不同。Go支持垃圾回收功能。Go的并行模型是以東尼·霍爾的通信順序進(jìn)程(CSP)為基礎(chǔ)。
采取類似模型的其他語言包括Occam和Limbo,但它也具有Pi運(yùn)算的特征,比如通道傳輸。在1.8版本中開放插件(Plugin)的支持,這意味著現(xiàn)在能從Go中動態(tài)加載部分函數(shù)。
Delve常用命令
命令功能:
dlv attach后面跟 pid,用來Debug編譯好的Golang程序。
dlv core用于 coredump。
dlv debug后面跟要調(diào)試的 go 文件,進(jìn)入 Debug。
dlv testDebug test 函數(shù)。
第一種:LiteIDE
LiteIDE是一個簡單的開源IDE,值得注意的是,它是GO語言2012年正式版發(fā)布的首個IDE,由Qt開發(fā),它看起來類似于Visual Studio等其他編譯器。
由于它是為golang設(shè)計(jì)的,LiteIDE為開發(fā)人員提供了許多有用的功能,包括可配置的構(gòu)建命令,高級代碼編輯器和廣泛的golang支持。其他功能包括代碼管理、gdb、Delve調(diào)試器、自動完成和使用WordApi的主題,基于MIME類型的系統(tǒng)等。
第二種:VS Code
它是微軟開發(fā)的廣受歡迎的開源IDE,有一個開箱即用的go擴(kuò)展可供VS Code使用。VS Code插件為開發(fā)人員提供了很多功能,包括與許多go工具集成。
VS Code通過IntelliSense,內(nèi)置git集成,直接從編譯器調(diào)試代碼等功能提供智能完成功能;VS Code具有高度可擴(kuò)展性,并通過其許多擴(kuò)展提供了許多自定義選項(xiàng),還提供了幾十種語言的支持,成為受開發(fā)者歡迎的工具。
第三種:Atom
開發(fā)人員可以利用這個Atom IDE改進(jìn)的語言集成與更智能的編輯器。開源的go-plus軟件包使開發(fā)人員更容易在GO中進(jìn)行編程。
Atom和go-plus軟件包為golang提供工具,構(gòu)建流程,linters、vet和coverage工具的支持;其他功能包括自動完成、格式化、測試和文檔。
第四種:Vim
Vim有許多插件可以幫助開發(fā)人員更輕松地編輯他們的GO代碼;Vim-go插件自動安裝所有必要的東西,為Vim中的GO開發(fā)人員提供更平滑的集成。
Vim-go具有許多有用的功能,包括編譯器,改進(jìn)的語法高亮和折疊,完成支持以及一系列具有集成支持的調(diào)試程序。還有一些使用的高級源分析工具,包括GoImplements、GoCallees和GoReferrers。
英文原文鏈接【Go, the unwritten parts】 發(fā)表于2017/05/22 作者JBD是Go語言開發(fā)小組成員
檢查程序的執(zhí)行路徑和當(dāng)前狀態(tài)是非常有用的調(diào)試手段。核心文件(core file)包含了一個運(yùn)行進(jìn)程的內(nèi)存轉(zhuǎn)儲和狀態(tài)。它主要是用來作為事后調(diào)試程序用的。它也可以被用來查看一個運(yùn)行中的程序的狀態(tài)。這兩個使用場景使調(diào)試文件轉(zhuǎn)儲成為一個非常好的診斷手段。我們可以用這個方法來做事后診斷和分析線上的服務(wù)(production services)。
在這篇文章中,我們將用一個簡單的hello world網(wǎng)站服務(wù)作為例子。在現(xiàn)實(shí)中,我們的程序很容易就會變得很復(fù)雜。分析核心轉(zhuǎn)儲給我們提供了一個機(jī)會去重構(gòu)程序的狀態(tài)并且查看只有在某些條件/環(huán)境下才能重現(xiàn)的案例。
作者注 : 這個調(diào)試流程只在Linux上可行。我不是很確定它是否在其它Unixs系統(tǒng)上工作。macOS對此還不支持。Windows現(xiàn)在也不支持。
在我們開始前,需要確保核心轉(zhuǎn)儲的ulimit設(shè)置在合適的范圍。它的缺省值是0,意味著最大的核心文件大小是0。我通常在我的開發(fā)機(jī)器上將它設(shè)置成unlimited。使用以下命令:
接下來,你需要在你的機(jī)器上安裝 delve 。
下面我們使用的 main.go 文件。它注冊了一個簡單的請求處理函數(shù)(handler)然后啟動了HTTP服務(wù)。
讓我們編譯并生產(chǎn)二進(jìn)制文件。
現(xiàn)在讓我們假設(shè),這個服務(wù)器出了些問題,但是我們并不是很確定問題的根源。你可能已經(jīng)在程序里加了很多輔助信息,但還是無法從這些調(diào)試信息中找出線索。通常在這種情況下,當(dāng)前進(jìn)程的快照會非常有用。我們可以用這個快照深入查看程序的當(dāng)前狀態(tài)。
有幾個方式來獲取核心文件。你可能已經(jīng)熟悉了奔潰轉(zhuǎn)儲(crash dumps)。它們是在一個程序奔潰的時候?qū)懭氪疟P的核心轉(zhuǎn)儲。Go語言在缺省設(shè)置下不會生產(chǎn)奔潰轉(zhuǎn)儲。但是當(dāng)你把 GOTRACEBACK 環(huán)境變量設(shè)置成“crash”,你就可以用 Ctrl+backslash 才觸發(fā)奔潰轉(zhuǎn)儲。如下圖所示:
上面的操作會使程序終止,將堆棧跟蹤(stack trace)打印出來,并把核心轉(zhuǎn)儲文件寫入磁盤。
另外個方法可以從一個運(yùn)行的程序獲得核心轉(zhuǎn)儲而不需要終止相應(yīng)的進(jìn)程。 gcore 可以生產(chǎn)核心文件而無需使運(yùn)行中的程序退出。
根據(jù)上面的操作,我們獲得了轉(zhuǎn)儲而沒有終止對應(yīng)的進(jìn)程。下一步就是把核心文件加載進(jìn)delve并開始分析。
差不多就這些。delve的常用操作都可以使用。你可以backtrace,list,查看變量等等。有些功能不可用因?yàn)槲覀兪褂玫暮诵霓D(zhuǎn)儲是一個快照而不是正在運(yùn)行的進(jìn)程。但是程序執(zhí)行路徑和狀態(tài)全部可以訪問。