首先,问题的说法是有问题的。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