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