跳至內容
主選單
主選單
移至側邊欄
隱藏
導覽
首頁
近期變更
隨機頁面
MediaWiki說明
Taiwan Tongues 台語維基
搜尋
搜尋
外觀
建立帳號
登入
個人工具
建立帳號
登入
檢視 Go 的原始碼
頁面
討論
臺灣正體
閱讀
檢視原始碼
檢視歷史
工具
工具
移至側邊欄
隱藏
操作
閱讀
檢視原始碼
檢視歷史
一般
連結至此的頁面
相關變更
特殊頁面
頁面資訊
外觀
移至側邊欄
隱藏
←
Go
由於以下原因,您無權編輯此頁面:
您請求的操作只有這些群組的使用者能使用:
使用者
、taigi-reviewer、apibot
您可以檢視並複製此頁面的原始碼。
'''Go'''(閣稱'''Golang''')是 Google 開發的一種靜態強型別、編譯型、並發型,而且有糞埽回收功能的程式語言。 羅伯特 ・ 格瑞史莫、羅榮 ・ 派克佮肯 ・ 湯普遴佇二空空七年九月開始設計 Go,較等咧伊恩 ・ 蘭斯 ・ 泰勒(Ian Lance Taylor)、 拉斯 ・ 考克斯(Russ Cox)加入專案。Go 是因為 Inferno 作業系統所開發的。Go 佇二空空九年十一月正式宣佈推出,成做開放原始碼專案,支援 Linux、macOS、Windows 等作業系統。 佇二空一六年,Go 予軟體評價公司 TIOBE 選為「TIOBE 二空一六年最佳語言」。 目前,Go 每半冬發佈一个二級版本(即從 a . x 升級到 a . y)。 ==是咧講== Go 的語法接近 C 語言,但對著變數的聲明有所無仝款。Go 支援糞埽回收功能。Go 的平行計算模型是以東尼 ・ 霍爾的交談循序程式(CSP)為基礎,採取類似模型的其他的語言套件括 Occam 和 Limbo,Go 嘛有這个模型的特徵呢,比如講通道傳輸。通過 goroutine 佮通道等閣列構造會當建造執行緒池佮管道等等的。佇一鋪八版本內底開放外掛程式(Plugin)的支援,無意味著會當對 Go 中動態載入部份函式。 佮 C + + 相比並,Go 並無包括如列舉、例外處理、繼承、泛型(這是功能佇咧 go 一孵一八中加入)、 斷言、虛擬函式等等的功能,猶毋過有增加切片 ( Slice ) 型、並行、管道、糞埽回收、介面等特性的語言級支援。對斷言的存在,是持負面態度,同時嘛為家己無提供型莫繼承來辯護。 無仝 Java,Go 原生提供關聯陣列(嘛是雜鬥表(Hashes)抑是字典(Dictionaries))。 ==批評== 就算講 Go 的官方佮支持者對語言內底袂當用泛型佮異常處理有大量辯解說詞,毋過批評聲也毋捌停過。咧發表 Go 語言二四界空的草案的時陣,官方講無泛型、異常處理佮模組對於 Go 發展造成真大的阻礙,等同承認 Go 無遮的特色是設計錯誤。 Go 的糞埽回收機制一直予臭頭雞仔,一直到一石八版本糞埽回收的功能才有較穩定。毋過就算講遮爾,Go 的糞埽回收抑是遠遠落後 JVM 的 G 一和 ZGC。Discord 的研發團隊佇二空二空年初甚至發表一篇部落格,宣佈共其中一个服務由 Go 轉移到 Rust,理由是 Go 的糞埽回收會致使每二分鐘出現一擺卡頓,並且 Discord 研發團隊測試矣 Go 語言的一鈕八、一孵九、一孵一空版本這个問題攏無改善。 ==歷史== 二空空七年,Google 設計的 Go,目的是提高在多核、網路機器(networked machines)、 大型代碼庫(codebases)的情況下開發效率。彼當陣佇咧 Google,設計師想欲解決其他的語言使用中的缺點,但是猶原保留𪜶的優點。 * 靜態型別和執行的時效率。(如:C + +) * 通讀性佮易用性。(如:Python 和 JavaScript) * 高效能的網路佮多行程。 設計師主要受𪜶之間流傳的「毋通像 C + +」啟發。 Go 佇二空空九年十一月正式宣佈推出,版本一孵空佇二空一二年三月發佈。了後,Go 廣泛應用於 Google 的產品佮濟濟其他組織佮開源專案。 佇二空一六年十一月,Go(一个無襯線體)和 Go Mono 字型(一種等闊字型)分別由著設計師查爾斯 ・ 比格洛和克莉絲 ・ 荷姆斯發布。兩種字型攏採用矣 WGL 四,並且照著 DIN 一千四百五十標準,會用得足深的使用矣 large x-height 和 letterforms。 佇二空一八年八月,原生的圖示換起來。待描述完整但是,Gopher mascot 猶閣有仝款號的名。 佇二空一八年八月,Go 的主要貢獻者發佈了兩个關於語言新功能的「草稿設計—— 泛型佮例外處理,同齊尋求 Go 使用者的回饋。Go 因為在一 . x 時,欠缺對泛型編程的支援佮傷長的例外處理來備受批評。 ===版本歷史=== Go 一保證語言規範佮標準庫的主要部份相容。到這陣的 Go 一孵二空發布 e,所有的版本攏履行矣這个承諾。 逐个主要的 Go 發佈版本會受著支援,到出現兩个新的主要版本為止。 ==代碼範例== ===Hello World=== 下跤是用 Go 寫成的 Hello World 程式: ===HTTP 彼號網頁侍服器=== 透過 Go 干焦需要幾行程式碼就完成 HTTP 彼號網頁侍服器的實在: ===Echo 命令程式=== 下跤的例說明了是按怎用 Go 去實現一个像 Unix 中的 Echo 命令程式: ==語言特徵== ===編寫風格=== Go 有定義如下的編寫風格: 一 . 每行程式了後無需要編寫分號 ` ; `。 二 . 大括號 ` { ` 袂使換行囥。 三 . ` if ` 判斷式佮 ` for ` 迴箍毋免以小括號包括起來。 四 . 使用 tab 做排版除了第二點外(換行會產生編譯錯誤), 佇無符合上述規定的時陣,猶閣會當編譯,但是使用著內建 gofmt 家私頭仔,會自動整理程式碼,予符合規定的編寫風格。 ===專案架構=== ====module==== Go 採用 module 的概念(佇咧 go 一爿一爿才開始啟用,舊版本請參閱工作區), 逐个案攏是一个 module,猶閣逐个 module 下底會有一个 ` go . mod ` 的檔案,來管理該 module 所參照的外部庫、開發版本…… 等咧。 一个 module 的資料篋仔 kha-tá-lok-guh 可能如下 ` ` ` go . mod hello / hello . go outyet / main . go main _ test . go # 測試用的程式 stringutil / reverse . go reverse _ test . go # 測試用的程式 bmp / reader . go writer . go ` ` ` 然後 go . mod 的內容可能為這个 ` ` ` module example . org / go-mod-sample go 一孵一一 require ( github . com / golang / example v 空吱吱 . 空九二十五空二千二百空四分一千二百二十一孵三千六百五十二 e 六桱八千七百七十三 dfca 零 golang . org / x / image v 空七一 . 零 ) ` ` ` ====工作區==== Go 的工作區佇咧 ` GOPATH `,其實 kha-tá-lok-guh 結構如下: ` ` ` src pkg bin ` ` ` 三个 kha-tá-lok-guh 的用途分別為舉例來講,規个案 kha-tá-lok-guh 可能會落去乎: ` ` ` bin / hello # 生成的執行檔 outyet # 生成的執行檔 pkg / linux _ amd 六十四 / github . com / golang / example / stringutil . a # 編譯的時,生成的對象檔案 src / github . com / golang / example / . git / # 外部 Git 庫的詮釋資料 hello / hello . go # Git 庫的程式碼 outyet / main . go # Git 庫的程式碼 main _ test . go # Git 庫的程式碼(測試用的程式) stringutil / reverse . go # Git 庫的程式碼 reverse _ test . go # Git 庫的程式碼(測試用的程式) golang . org / x / image / . git / # 外部 Git 庫的詮釋資料 bmp / reader . go # Git 庫的程式碼 writer . go # Git 庫的程式碼 ` ` ` ===輕型協程=== Go 的主要特色囥佇咧使用的併行設計,叫做 Goroutine,透過 Goroutine 會當予程式以異步的方式執行,就無需要煩惱一个函式致使程式斷去,所以 Go 嘛非常的適合網路服務。準講有一个程式,內底有兩个函式: 這个時陣透過 Go 予其中一个函式同步執行,按呢就無需要等待這改函式執行了後才會當執行後一个函式。 Goroutine 是類似執行緒的概念,屬於纖程 ( 區別於協程佮執行緒 )。執行緒屬於系統層面,通常來講建立一个新的執行緒會消磨較濟的資源閣管理無簡單;啊若協程的主要是欲作用是提供予一个執行緒內的併發性,煞袂當利用家己的處理器執行緒。而且 Goroutine 就親像輕量級的執行緒,一个 Go 程式會當執行超過數萬个 Goroutine,而且遮的效能攏是原生級的,隨時攏會當關起來、結束,而且運行佇濟个處理器執行緒上。一个核心內底會當有偌个 Goroutine,透過 GOMAXPROCS 參數你會當限制 Gorotuine 會當佔用幾个系統執行緒來避免失控。 佇內建的官方套佇內底嘛不時會當看著 Goroutine 的應用,像講 net / http 中用來監聽網路服務的函式實際上是建立一个不斷執行迴圈的 Goroutine;同時配合矣 epoll 等 IO 多路復用機制維護 Goroutine 的事件回轉。 ==編譯器== 當前有兩个 Go 編譯器分支,分別為官方編譯器 gc 和 gccgo。官方編譯器佇初期的時陣是用 C 寫做,後用 Go 重寫對而實現自舉。Gccgo 𪜶是一種使用標準 GCC 成做後端的 Go 編譯器。 官方編譯器支援平台編譯(毋過無支援 CGO), 允准將原始碼編譯做會當佇目標系統、架構上執行的二進位檔案。 ==參考文獻== ==外部連結== [[分類: 待校正]]
返回到「
Go
」。