首先,問題的說法是有問題的。golang
golang自己是用什麼語言寫的?
從問題描述和下面的回答來看,題主真正想問的是編程
Golang 的編譯器是用什麼語言寫的?
看起來像是個「雞生蛋,蛋生雞」的問題,實際上不是的。編程語言
這個問題的關鍵在於理解,編譯器自己就是一個程序,它的功能就是把源代碼翻譯爲計算機可執行的程序。學習
對於 C/C++、Go、Rust 這樣的本地語言,它們編譯生成後的目標程序就是目標平臺的本地可執行程序。好比你用這三種語言寫個 Hello World,在 Windows 平臺下用編譯的結果必定是一個 .exe 文件,這些 .exe 文件裏面沒有包含任何源語言的信息。Windows 運行它們的時候不知道,也不須要知道這些 .exe 文件編譯以前是用什麼語言寫的,只須要把它們加載進內存,一句一句地執行指令就好了。spa
編譯器程序也是這個道理。假如你發明了一種新的語言 CNifeLang,首先須要用一種現有的語言寫一個 CNifeLang 的編譯器,好比說就用 Golang 吧;你用 Golang 寫了一個 CNifeLang 的編譯器,能成功地把任何合法的 CNifeLang 源代碼編譯爲等價的目標程序。接着用 CNifeLang 寫一個程序,它與你用 Golang 寫的編譯器功能徹底相同,用 Golang 實現的編譯器把這個程序編譯完成,你就獲得了一個用 CNifeLang 實現的 CNifeLang 編譯器。由於這個程序的功能與用 Golang 寫的編譯器徹底相同,因此你徹底能夠用這個編譯器去編譯 CNifeLang,因而 CNifeLang 實現了 自舉。翻譯
若是題主學習了編譯原理這門課,就會發現編譯與編程語言是沒有關係的,它有一套完整而成熟的操做方法,你徹底能夠用任何一種圖靈完備的語言去寫任何一種形式語言的編譯器,並且有嚴格的數學方法證實你寫的編譯器是正確的。內存
咱們常見的編程語言基本都實現了自舉,這是一種編程語言發展成熟的標誌之一。由於編譯器既是一個複雜的工程,也有一套成熟的評價體系,能寫出成熟可用、效率有保證的本語言編譯器,就能說明這種語言已經能拿來用了。get