從0開(kāi)發(fā)一門(mén)編程語(yǔ)言一:Windows10調(diào)式GO源代碼

本文非教程,主要是記錄博主自己研究的過(guò)程.
自己動(dòng)手開(kāi)發(fā)一門(mén)編程語(yǔ)言是從大學(xué)選擇計(jì)算機(jī)就有的夢(mèng)想,奈何門(mén)檻太硬,準(zhǔn)備到現(xiàn)在
倒是想把他寫(xiě)成教程,但是水太深,能力有限,哈哈.
雖然不是教程,但是也有一定的參考意義,可以學(xué)習(xí)下.
學(xué)習(xí)前的準(zhǔn)備知識(shí):
掌握J(rèn)S,3天GO語(yǔ)言基本知識(shí)學(xué)習(xí)經(jīng)驗(yàn)
<<自制編譯器>><<編譯原理與實(shí)踐>>
博主是上面兩門(mén)書(shū)讀不下去了,沒(méi)有代入感,想著有沒(méi)有更好的教程,然后發(fā)現(xiàn)了GO語(yǔ)言設(shè)計(jì)與實(shí)踐
這個(gè)教程,看著是那么回事,但是一動(dòng)手發(fā)現(xiàn)坑太多,主要博主系統(tǒng)是Windows10 64位和教程用的linux不一樣.
第一章踩了一天的坑,感覺(jué)不能白踩,寫(xiě)篇博客記錄下來(lái).
正文:
如果我們想調(diào)試GO的源代碼,大概思路是 下載GO源代碼->修改GO源代碼->編譯GO源代碼->執(zhí)行個(gè)測(cè)試文件查看效果.
1.下載GO源代碼
去GO的官網(wǎng)下載GO源代碼,源碼下載,
其實(shí)官網(wǎng)給的是一個(gè)git地址,博主訪問(wèn)超時(shí)了,翻墻才下載成功,
可以不看官網(wǎng)直接按照下面地址下載就行
博主是下載到E盤(pán)goroot目錄

git clone https://go.googlesource.com/go goroot 

大概880M,

image.png

2.修改GO源代碼
我們就簡(jiǎn)單修改一下,檢驗(yàn)下調(diào)試思路是不是通的
IDE打開(kāi)goroot/src/fmt/print.go 這個(gè)文件
然后找到函數(shù)Println 在里面加一行'println("niu bi le")',println是內(nèi)置方法,可以直接使用.
image.png

3.安裝編譯環(huán)境
Windows平臺(tái)要用GCC編譯GO源碼,GCC還分32位和64位;
Windows的GCC軟件是MINGW,比較古老
這里坑比較多哈,正常應(yīng)該下載個(gè)MinGW就行了,但是這個(gè)軟件太老了,博主下載64的MINGW,運(yùn)行軟件報(bào)錯(cuò).報(bào)錯(cuò)the file has been downloiaded incorrectly
軟件的問(wèn)題,
image.png

光看這個(gè)軟件的圖標(biāo)就知道多么old了!
最后去stackoverflow找到的方法,問(wèn)題地址
參考這個(gè)方法
image.png

點(diǎn)進(jìn)去方法提供的鏈接,其實(shí)就是去下載MINGW64離線包,
去官網(wǎng)下載MINGW64的是個(gè)殼子,運(yùn)行后你還得勾選要哪些環(huán)境,離線包是全給你下載了比較大.

image.png

根據(jù)紅框里的版本下載,別下錯(cuò)了.
博主把下載的離線包放在了C盤(pán),記得復(fù)制目錄
image.png

然后把該bin路徑添加到PATH環(huán)境變量里.
這個(gè)時(shí)候重新打開(kāi)控制臺(tái),輸入gcc回車,如果提示沒(méi)有找到輸入文件,說(shuō)明編譯環(huán)境安裝成功,如圖
image.png

4.編譯GO源碼
命令行切換到src目錄下,輸入make.bat回車,linux輸入make.bash
等待一會(huì),如果執(zhí)行結(jié)果最后一行是Installed commands in XXX/bin
說(shuō)明執(zhí)行成功!
博主是執(zhí)行成功后在goroot/bin目錄下生成了一個(gè)go.exe文件
5.執(zhí)行測(cè)試文件
我們?cè)谏删幾g后執(zhí)行文件的目錄下(博主的是goroot/bin),加個(gè)測(cè)試文件main.go

package main

import "fmt"

func main() {
    fmt.Println("Hello World")
}

main.go正常只會(huì)打印輸出Hello World,但是我們之前再GO Println函數(shù)源碼加了一行println"niu bi le"
所以,如果編譯源碼成功,應(yīng)該先輸出"niu bi le"再輸出"Hello World"
博主之前系統(tǒng)裝過(guò)golang,如果直接執(zhí)行g(shù)o run main.go 則調(diào)用的是原來(lái)安裝的go,只會(huì)輸出hello world.
這里,我們把goroot/bin目錄里的go.exe改個(gè)名字,比如改成go2.exe,然后把該bin路徑加入系統(tǒng)path環(huán)境變量里.


image.png

紅框是原來(lái)安裝的go,綠框是本次教程新增的環(huán)境變量.
重新打開(kāi)控制臺(tái),讓環(huán)境變量生效,
在控制臺(tái)輸入go2回車,確認(rèn)是否生效
然后在goroot/bin目錄下執(zhí)行g(shù)o2 run main.go


image.png

如圖所示,大功告成!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容