真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言打印堆棧工具的簡(jiǎn)單介紹

golang打印棧大小

8.1。根據(jù)查詢golang打印棧官方公布的參數(shù)顯示,golang打印棧大小為8.1,Go又稱Golang,是Google開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。

我們注重客戶提出的每個(gè)要求,我們充分考慮每一個(gè)細(xì)節(jié),我們積極的做好成都做網(wǎng)站、網(wǎng)站制作服務(wù),我們努力開拓更好的視野,通過不懈的努力,創(chuàng)新互聯(lián)贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵(lì)著我們更好的服務(wù)客戶。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),重慶小程序開發(fā),網(wǎng)站開發(fā),技術(shù)開發(fā)實(shí)力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫的技術(shù)開發(fā)工程師。

SystemTap工具的使用基礎(chǔ)

查看當(dāng)前內(nèi)核版本是哪一個(gè),然后使用

找到內(nèi)核構(gòu)建的詳細(xì)信息,然后去對(duì)應(yīng)發(fā)布網(wǎng)站上找kernel-debuginfo和kernel-debuginfo-common包。

完成安裝后可以通過下面命令測(cè)試systemtap

進(jìn)行測(cè)試,看看systemtap有無安裝成功。

下面命令演示查看__lookup_hash()函數(shù)返回時(shí)刻可以查看到的變量

在上表中顯示了lookup_hash在文件中的行號(hào),顯示了名為$return 的變量,其實(shí)這個(gè)return變量就是systemtap表示函數(shù)返回值的。而$name,$base,$flag我們對(duì)著linux源碼看發(fā)現(xiàn)這是__lookup_hash的三個(gè)入?yún)ⅰ?/p>

下面命令可以查看__lookup_hash函數(shù)入口可以查看的變量

也可以通過statement方式查看內(nèi)核符號(hào)表里有的__lookup_hash相關(guān)的行

如果查找的內(nèi)核函數(shù)位于某個(gè)模塊里可以使用下面命令:

通過下面命令可以查看到某個(gè)正在運(yùn)行的進(jìn)程的函數(shù)

上例中看到找到了syscall.Mount函數(shù),并且把它的所有參數(shù)和參數(shù)類型都打印了出來。

后面可以在stap腳本中,這個(gè)函數(shù)的上下文里直接使用這些參數(shù),例如通過$source可以訪問到參數(shù)source

systemtap支持print()和printf()函數(shù),其中printf使用語法和c語言一致。支持%s,%d,%x格式

在systemtap里凡是以$開頭的變量都是目標(biāo)變量,如果目標(biāo)變量結(jié)構(gòu)體指針或者結(jié)構(gòu)體對(duì)象,那么可以使用-直接訪問其成員。例如上例中:

常規(guī)情況下,printf()打印target變量時(shí)刻,只打印其值。如果需要將其成員(指針類型的target需要將其指向的對(duì)象的成員展開)可以在target變量后面加$的方式例如:

一般情況下對(duì)struct的展開只會(huì)到成員值一級(jí),如果相對(duì)成員內(nèi)部繼續(xù)展開可以在目標(biāo)變量后面跟$$

在systemtap中支持邏輯if語句格式為:

邏輯語句支持以下比較

==,!=,=,,,=

上述例子對(duì)ls -l下的xmalloc進(jìn)行堆?;厮荩?/p>

-d 可執(zhí)行文件名

--ldd 指明共享庫

-c “l(fā)s -l” 執(zhí)行的子進(jìn)程體

下面例子將打印__lookup_hash中return返回dentry*里inode指向的i_ino子成員

這一例子中-o zxy.txt的意思就是將結(jié)果寫入文件zxy.txt中(默認(rèn)輸出到控制臺(tái))

下面例子將在內(nèi)核中使用強(qiáng)制類型轉(zhuǎn)換

這里解釋一下,內(nèi)核中方法強(qiáng)制轉(zhuǎn)換

在用systemtap跟蹤內(nèi)核時(shí)使用堆棧打印命令,常常打印不出來另外模塊的函數(shù),這是因?yàn)檫@些模塊沒有被加載。可以在systemtap啟動(dòng)命令使用--all-modules 方法強(qiáng)制將所有模塊符號(hào)加載起來。

下面例子對(duì)用golang寫的dockerd進(jìn)程syscall.Mount調(diào)用入口時(shí)刻打印syscall.Mount()函數(shù)的參數(shù)

source的string字段內(nèi)容

下面例子打印golang寫的dockerd進(jìn)程xxx.Get函數(shù)返回時(shí)刻的參數(shù)情況

}

systemtap對(duì)golang支持不夠完美,用戶需要自己解析基本結(jié)構(gòu)例如golang的string,array和slice這些都需要用戶自己解析。string被systemtap識(shí)別為struct string,此結(jié)構(gòu)systemtap可以識(shí)別的定義可以簡(jiǎn)化為:

需要注意的是 通過systemtap打印golang string的string-str會(huì)多打很多字符,因?yàn)閟tring成員str并非按照c語言定義的字符串以\0表示字符串結(jié)束,我們只能結(jié)合string的字段len來獲取精確的字符串內(nèi)容

slice完全不被systemtap識(shí)別,我們可以將systemtap可以識(shí)別的slice簡(jiǎn)化為此種定義:

其中array就是指向slice存儲(chǔ)單元的首地址。

要是我們想獲取helo=[]string{“hello”,”world”}這樣的字符串slice的內(nèi)容可以通過systemtap提供的@cast(addr,”type”,”file”)函數(shù)將某個(gè)地址強(qiáng)轉(zhuǎn)為file中定義的type結(jié)構(gòu)。具體來說可以如下做獲取hello的內(nèi)容

Golang 中更好的錯(cuò)誤處理:理論和實(shí)踐技巧

云和安全管理服務(wù)專家新鈦云服 張春翻譯

這種方法有幾個(gè)缺點(diǎn)。首先,它可以對(duì)程序員隱藏錯(cuò)誤處理路徑,特別是在捕獲異常不是強(qiáng)制性的情況下,例如在 Python 中。即使在具有必須處理的 Java 風(fēng)格的檢查異常的語言中,如果在與原始調(diào)用不同的級(jí)別上處理錯(cuò)誤,也并不總是很明顯錯(cuò)誤是從哪里引發(fā)的。

我們都見過長(zhǎng)長(zhǎng)的代碼塊包裝在一個(gè) try-catch 塊中。在這種情況下,catch 塊實(shí)際上充當(dāng) goto 語句,這通常被認(rèn)為是有害的(奇怪的是,C 中的關(guān)鍵字被認(rèn)為可以接受的少數(shù)用例之一是錯(cuò)誤后清理,因?yàn)樵撜Z言沒有 Golang- 樣式延遲語句)。

如果你確實(shí)從源頭捕獲異常,你會(huì)得到一個(gè)不太優(yōu)雅的 Go 錯(cuò)誤模式版本。這可能會(huì)解決混淆代碼的問題,但會(huì)遇到另一個(gè)問題:性能。在諸如 Java 之類的語言中,拋出異常可能比函數(shù)的常規(guī)返回慢數(shù)百倍。

Java 中最大的性能成本是由打印異常的堆棧跟蹤造成的,這是昂貴的,因?yàn)檫\(yùn)行的程序必須檢查編譯它的源代碼 。僅僅進(jìn)入一個(gè) try 塊也不是空閑的,因?yàn)樾枰4?CPU 內(nèi)存寄存器的先前狀態(tài),因?yàn)樗鼈兛赡苄枰趻伋霎惓5那闆r下恢復(fù)。

如果您將異常視為通常不會(huì)發(fā)生的異常情況,那么異常的缺點(diǎn)并不重要。這可能是傳統(tǒng)的單體應(yīng)用程序的情況,其中大部分代碼庫不必進(jìn)行網(wǎng)絡(luò)調(diào)用——一個(gè)操作格式良好的數(shù)據(jù)的函數(shù)不太可能遇到錯(cuò)誤(除了錯(cuò)誤的情況)。一旦您在代碼中添加 I/O,無錯(cuò)誤代碼的夢(mèng)想就會(huì)破滅:您可以忽略錯(cuò)誤,但不能假裝它們不存在!

try {

doSometing()

} catch (IOException e) {

// ignore it

}

與大多數(shù)其他編程語言不同,Golang 接受錯(cuò)誤是不可避免的。 如果在單體架構(gòu)時(shí)代還不是這樣,那么在今天的模塊化后端服務(wù)中,服務(wù)通常和外部 API 調(diào)用、數(shù)據(jù)庫讀取和寫入以及與其他服務(wù)通信 。

以上所有方法都可能失敗,解析或驗(yàn)證從它們接收到的數(shù)據(jù)(通常在無模式 JSON 中)也可能失敗。Golang 使可以從這些調(diào)用返回的錯(cuò)誤顯式化,與普通返回值的等級(jí)相同。從函數(shù)調(diào)用返回多個(gè)值的能力支持這一點(diǎn),這在大多數(shù)語言中通常是不可能的。Golang 的錯(cuò)誤處理系統(tǒng)不僅僅是一種語言怪癖,它是一種將錯(cuò)誤視為替代返回值的完全不同的方式!

重復(fù) if err != nil

對(duì) Go 錯(cuò)誤處理的一個(gè)常見批評(píng)是被迫重復(fù)以下代碼塊:

res, err := doSomething()

if err != nil {

// Handle error

}

對(duì)于新用戶來說,這可能會(huì)覺得沒用而且浪費(fèi)行數(shù):在其他語言中需要 3 行的函數(shù)很可能會(huì)增長(zhǎng)到 12 行 :

這么多行代碼!這么低效!如果您認(rèn)為上述內(nèi)容不優(yōu)雅或浪費(fèi)代碼,您可能忽略了我們檢查代碼中的錯(cuò)誤的全部原因:我們需要能夠以不同的方式處理它們!對(duì) API 或數(shù)據(jù)庫的調(diào)用可能會(huì)被重試。

有時(shí)事件的順序很重要:調(diào)用外部 API 之前發(fā)生的錯(cuò)誤可能不是什么大問題(因?yàn)閿?shù)據(jù)從未通過發(fā)送),而 API 調(diào)用和寫入本地?cái)?shù)據(jù)庫之間的錯(cuò)誤可能需要立即注意,因?yàn)?這可能意味著系統(tǒng)最終處于不一致的狀態(tài)。即使我們只想將錯(cuò)誤傳播給調(diào)用者,我們也可能希望用失敗的解釋來包裝它們,或者為每個(gè)錯(cuò)誤返回一個(gè)自定義錯(cuò)誤類型。

并非所有錯(cuò)誤都是相同的,并且向調(diào)用者返回適當(dāng)?shù)腻e(cuò)誤是 API 設(shè)計(jì)的重要部分,無論是對(duì)于內(nèi)部包還是 REST API 。

不必?fù)?dān)心在你的代碼中重復(fù) if err != nil ——這就是 Go 中的代碼應(yīng)該看起來的樣子。

自定義錯(cuò)誤類型和錯(cuò)誤包裝

從導(dǎo)出的方法返回錯(cuò)誤時(shí),請(qǐng)考慮指定自定義錯(cuò)誤類型,而不是單獨(dú)使用錯(cuò)誤字符串。字符串在意外代碼中是可以的,但在導(dǎo)出的函數(shù)中,它們成為函數(shù)公共 API 的一部分。更改錯(cuò)誤字符串將是一項(xiàng)重大更改——如果沒有明確的錯(cuò)誤類型,需要檢查返回錯(cuò)誤類型的單元測(cè)試將不得不依賴原始字符串值!事實(shí)上,基于字符串的錯(cuò)誤也使得在私有方法中測(cè)試不同的錯(cuò)誤案例變得困難,因此您也應(yīng)該考慮在包中使用它們。回到錯(cuò)誤與異常的爭(zhēng)論,返回錯(cuò)誤也使代碼比拋出異常更容易測(cè)試,因?yàn)殄e(cuò)誤只是要檢查的返回值。不需要測(cè)試框架或在測(cè)試中捕獲異常 。

可以在 database/sql 包中找到簡(jiǎn)單自定義錯(cuò)誤類型的一個(gè)很好的示例。它定義了一個(gè)導(dǎo)出常量列表,表示包可以返回的錯(cuò)誤類型,最著名的是 sql.ErrNoRows。雖然從 API 設(shè)計(jì)的角度來看,這種特定的錯(cuò)誤類型有點(diǎn)問題(您可能會(huì)爭(zhēng)辯說 API 應(yīng)該返回一個(gè)空結(jié)構(gòu)而不是錯(cuò)誤),但任何需要檢查空行的應(yīng)用程序都可以導(dǎo)入該常量并在代碼中使用它不必?fù)?dān)心錯(cuò)誤消息本身會(huì)改變和破壞代碼。

對(duì)于更復(fù)雜的錯(cuò)誤處理,您可以通過實(shí)現(xiàn)返回錯(cuò)誤字符串的 Error() 方法來定義自定義錯(cuò)誤類型。自定義錯(cuò)誤可以包括元數(shù)據(jù),例如錯(cuò)誤代碼或原始請(qǐng)求參數(shù)。如果您想表示錯(cuò)誤類別,它們很有用。DigitalOcean 的本教程展示了如何使用自定義錯(cuò)誤類型來表示可以重試的一類臨時(shí)錯(cuò)誤。

通常,錯(cuò)誤會(huì)通過將低級(jí)錯(cuò)誤與更高級(jí)別的解釋包裝起來,從而在程序的調(diào)用堆棧中傳播。例如,數(shù)據(jù)庫錯(cuò)誤可能會(huì)以下列格式記錄在 API 調(diào)用處理程序中:調(diào)用 CreateUser 端點(diǎn)時(shí)出錯(cuò):查詢數(shù)據(jù)庫時(shí)出錯(cuò):pq:檢測(cè)到死鎖。這很有用,因?yàn)樗梢詭椭覀兏欏e(cuò)誤在系統(tǒng)中傳播的過程,向我們展示根本原因(數(shù)據(jù)庫事務(wù)引擎中的死鎖)以及它對(duì)更廣泛系統(tǒng)的影響(調(diào)用者無法創(chuàng)建新用戶)。

自 Go 1.13 以來,此模式具有特殊的語言支持,并帶有錯(cuò)誤包裝。通過在創(chuàng)建字符串錯(cuò)誤時(shí)使用 %w 動(dòng)詞,可以使用 Unwrap() 方法訪問底層錯(cuò)誤。除了比較錯(cuò)誤相等性的函數(shù) errors.Is() 和 errors.As() 外,程序還可以獲取包裝錯(cuò)誤的原始類型或標(biāo)識(shí)。這在某些情況下可能很有用,盡管我認(rèn)為在確定如何處理所述錯(cuò)誤時(shí)最好使用頂級(jí)錯(cuò)誤的類型。

Panics

不要 panic()!長(zhǎng)時(shí)間運(yùn)行的應(yīng)用程序應(yīng)該優(yōu)雅地處理錯(cuò)誤而不是panic。即使在無法恢復(fù)的情況下(例如在啟動(dòng)時(shí)驗(yàn)證配置),最好記錄一個(gè)錯(cuò)誤并優(yōu)雅地退出。panic比錯(cuò)誤消息更難診斷,并且可能會(huì)跳過被推遲的重要關(guān)閉代碼。

Logging

我還想簡(jiǎn)要介紹一下日志記錄,因?yàn)樗翘幚礤e(cuò)誤的關(guān)鍵部分。通常你能做的最好的事情就是記錄收到的錯(cuò)誤并繼續(xù)下一個(gè)請(qǐng)求。

除非您正在構(gòu)建簡(jiǎn)單的命令行工具或個(gè)人項(xiàng)目,否則您的應(yīng)用程序應(yīng)該使用結(jié)構(gòu)化的日志庫,該庫可以為日志添加時(shí)間戳,并提供對(duì)日志級(jí)別的控制。最后一部分特別重要,因?yàn)樗鼘⒃试S您突出顯示應(yīng)用程序記錄的所有錯(cuò)誤和警告。通過幫助將它們與信息級(jí)日志分開,這將為您節(jié)省無數(shù)時(shí)間。

微服務(wù)架構(gòu)還應(yīng)該在日志行中包含服務(wù)的名稱以及機(jī)器實(shí)例的名稱。默認(rèn)情況下記錄這些時(shí),程序代碼不必?fù)?dān)心包含它們。您也可以在日志的結(jié)構(gòu)化部分中記錄其他字段,例如收到的錯(cuò)誤(如果您不想將其嵌入日志消息本身)或有問題的請(qǐng)求或響應(yīng)。只需確保您的日志沒有泄露任何敏感數(shù)據(jù),例如密碼、API 密鑰或用戶的個(gè)人數(shù)據(jù)!

對(duì)于日志庫,我過去使用過 logrus 和 zerolog,但您也可以選擇其他結(jié)構(gòu)化日志庫。如果您想了解更多信息,互聯(lián)網(wǎng)上有許多關(guān)于如何使用這些的指南。如果您將應(yīng)用程序部署到云中,您可能需要日志庫上的適配器來根據(jù)您的云平臺(tái)的日志 API 格式化日志 - 沒有它,云平臺(tái)可能無法檢測(cè)到日志級(jí)別等某些功能。

如果您在應(yīng)用程序中使用調(diào)試級(jí)別日志(默認(rèn)情況下通常不記錄),請(qǐng)確保您的應(yīng)用程序可以輕松更改日志級(jí)別,而無需更改代碼。更改日志級(jí)別還可以暫時(shí)使信息級(jí)別甚至警告級(jí)別的日志靜音,以防它們突然變得過于嘈雜并開始淹沒錯(cuò)誤。您可以使用在啟動(dòng)時(shí)檢查以設(shè)置日志級(jí)別的環(huán)境變量來實(shí)現(xiàn)這一點(diǎn)。

原文:

Go語言輸出打印--排坑

一.幾種公共方法

1)Print:???輸出到控制臺(tái)(不接受任何格式化,它等價(jià)于對(duì)每一個(gè)操作數(shù)都應(yīng)用?%v)

print 在golang中?是屬于輸出到標(biāo)準(zhǔn)錯(cuò)誤流中并打印,官方不建議寫程序時(shí)候用它??梢栽賒ebug時(shí)候用

2)Println:?輸出到控制臺(tái)并換行

3)Printf :?只可以打印出格式化的字符串。只可以直接輸出字符串類型的變量(不可以輸出整形變量和整形等)

4)Sprintf:格式化并返回一個(gè)字符串而不帶任何輸出

5)Fprintf:來格式化并輸出到 io.Writers 而不是 os.Stdout

二.帶占位符輸出--網(wǎng)址:? ??

和python差不多的道理,這里簡(jiǎn)單補(bǔ)充

v ????值的默認(rèn)格式

%+v???添加字段名(如結(jié)構(gòu)體)

%#v ?相應(yīng)值的Go語法表示?

%T????相應(yīng)值的類型的Go語法表示?

%%????字面上的百分號(hào),并非值的占位符

%c?????相應(yīng)Unicode碼點(diǎn)所表示的字符?

%x?????十六進(jìn)制表示,字母形式為小寫 a-f

%X?????十六進(jìn)制表示,字母形式為大寫 A-F

%U???? Unicode格式:U+1234,等同于?"U+%04X"

調(diào)試Go語言的核心轉(zhuǎn)儲(chǔ)(Core Dumps)

英文原文鏈接【Go, the unwritten parts】 發(fā)表于2017/05/22 作者JBD是Go語言開發(fā)小組成員

檢查程序的執(zhí)行路徑和當(dāng)前狀態(tài)是非常有用的調(diào)試手段。核心文件(core file)包含了一個(gè)運(yùn)行進(jìn)程的內(nèi)存轉(zhuǎn)儲(chǔ)和狀態(tài)。它主要是用來作為事后調(diào)試程序用的。它也可以被用來查看一個(gè)運(yùn)行中的程序的狀態(tài)。這兩個(gè)使用場(chǎng)景使調(diào)試文件轉(zhuǎn)儲(chǔ)成為一個(gè)非常好的診斷手段。我們可以用這個(gè)方法來做事后診斷和分析線上的服務(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)在也不支持。

在我們開始前,需要確保核心轉(zhuǎn)儲(chǔ)的ulimit設(shè)置在合適的范圍。它的缺省值是0,意味著最大的核心文件大小是0。我通常在我的開發(fā)機(jī)器上將它設(shè)置成unlimited。使用以下命令:

接下來,你需要在你的機(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ù)器出了些問題,但是我們并不是很確定問題的根源。你可能已經(jīng)在程序里加了很多輔助信息,但還是無法從這些調(diào)試信息中找出線索。通常在這種情況下,當(dāng)前進(jìn)程的快照會(huì)非常有用。我們可以用這個(gè)快照深入查看程序的當(dāng)前狀態(tài)。

有幾個(gè)方式來獲取核心文件。你可能已經(jīng)熟悉了奔潰轉(zhuǎn)儲(chǔ)(crash dumps)。它們是在一個(gè)程序奔潰的時(shí)候?qū)懭氪疟P的核心轉(zhuǎn)儲(chǔ)。Go語言在缺省設(shè)置下不會(huì)生產(chǎn)奔潰轉(zhuǎn)儲(chǔ)。但是當(dāng)你把 GOTRACEBACK 環(huán)境變量設(shè)置成“crash”,你就可以用 Ctrl+backslash 才觸發(fā)奔潰轉(zhuǎn)儲(chǔ)。如下圖所示:

上面的操作會(huì)使程序終止,將堆棧跟蹤(stack trace)打印出來,并把核心轉(zhuǎn)儲(chǔ)文件寫入磁盤。

另外個(gè)方法可以從一個(gè)運(yùn)行的程序獲得核心轉(zhuǎn)儲(chǔ)而不需要終止相應(yīng)的進(jìn)程。 gcore 可以生產(chǎn)核心文件而無需使運(yùn)行中的程序退出。

根據(jù)上面的操作,我們獲得了轉(zhuǎn)儲(chǔ)而沒有終止對(duì)應(yīng)的進(jìn)程。下一步就是把核心文件加載進(jìn)delve并開始分析。

差不多就這些。delve的常用操作都可以使用。你可以backtrace,list,查看變量等等。有些功能不可用因?yàn)槲覀兪褂玫暮诵霓D(zhuǎn)儲(chǔ)是一個(gè)快照而不是正在運(yùn)行的進(jìn)程。但是程序執(zhí)行路徑和狀態(tài)全部可以訪問。

學(xué)習(xí)go語言,用什么IDE比較好

1、Sublime text

這個(gè)文本編輯器在編程界極為普遍,它并非一個(gè)完全成熟的IDE,但它具備了很多語言的擴(kuò)展插件,比如Pyhon、lua等,其中有一個(gè)插件GoSublime專門針對(duì)Go語言,提供了語法高亮、自動(dòng)補(bǔ)全等功能,這些功能使Sublime Text稱為一個(gè)很實(shí)用的Go IDE。

2、IntelliJ

由Jetbrains提供,在Java開發(fā)者中更為流行,其自帶的Go插件支持語法高亮顯示、代碼補(bǔ)全、自動(dòng)編譯以及子庫支持,這就使使用者可以很方便地將項(xiàng)目拆分成多個(gè)包,可以在一個(gè)單獨(dú)的IDE中瀏覽它。它有個(gè)很好用的功能,插件使用了突出顯示來顯示未使用的變量或包。

3、LiteIDE

目前也是一個(gè)專門針對(duì)Go的IDE了,功能很全面,具備語法高亮、自動(dòng)補(bǔ)全、自動(dòng)編譯、調(diào)試、包瀏覽及管理。調(diào)試器在后臺(tái)使用的gdb,這樣可以方便地打印變量值、查看當(dāng)前堆棧信息。

4、Intype

是僅Windows下支持的文本編輯器,具備有限的語法高亮支持和特定的高亮顯示設(shè)置。

5、Netbeans

Netbeans內(nèi)建支持了大量語言,同時(shí)具備Go插件,從而可以同創(chuàng)建正常項(xiàng)目一樣,創(chuàng)建Go源文件,除了語法高亮以外,其Go插件并不支持其他特殊功能,如何使用IDE編譯Go文件還不得而知。

6、Eclipse

最受歡迎的IDE,GoClipse插件在Eclipse中添加了IDE功能來支持Go,GoClipse提供了可配置的語法高亮顯示、自動(dòng)文檔補(bǔ)全、自動(dòng)編譯以及最重要的實(shí)驗(yàn)調(diào)試支持。

7、TextMate

是一個(gè)Mac OS下的文本編輯器,可擴(kuò)展它以突出顯示Go代碼,并提供源代碼片段。

8、Komodo Edit

來自ActiveState的開源代碼編輯器,基于Monzilla 7.0且支持跨平臺(tái),支持多種語言,但免費(fèi)版的Komodo功能有限,它的golang插件komodo-go提供了基本的語法高亮、代碼補(bǔ)全功能。


當(dāng)前題目:go語言打印堆棧工具的簡(jiǎn)單介紹
當(dāng)前網(wǎng)址:http://weahome.cn/article/hhipdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部