作者:陳俊傑 / 臺灣大學計算機及資訊網路中心教學研究組幹事
Go程式語言是Google公司所開發,有時被稱之為Golang,自2009年推出以來,約每半年就會發布新的版本[1]。而且,在TIOBE指數,獲得2016年的最佳進步獎[2]。因此,本文將示範撰寫五子棋小遊戲,幫助每位讀者能進一步認識這個進步最多的程式語言。
Go程式簡介
本文將先介紹Go主程式的建置環境、開發工具,並透過簡單的範例介紹程式架構,以及如何撰寫五子棋(雙人對戰版)程式,並參考聯發科技工程師吳柏毅先生的文章[3],將其相關特性整理如下:
1. 快速部署:使用go build指令,即可編譯成二進制檔案。
2. 不需要Web伺服器:使用http.HandleFunc、http.ListenAndServe函式,就可以處理http連線。
3. 保護程式碼:所編寫的服務將是一個exe執行檔,不需要公開程式碼。
4. 多核心處理:使用go開頭的語法,就可以啟用多個執行緒。
5. 跨平台編譯:目前可編譯成Windows、MacOS或Linux的執行檔。
作業環境
1. 作業系統:Windows 7 Service Pack 1
2. 程式語言:Go 1.8.3(64位元版本)
3. 開發工具:LiteIDE X32.2
4. 本文所使用的路徑功能說明,如表1:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS85MGQyOTdhYS04ZjE2LTQ5NDYtOTUxOC1kNzhiYzZkZjE2ZDEucG5n&n=MjAxNzA5MjA0MjA4MDAxLnBuZw%3d%3d)
表1:路徑功能說明
環境設定:Windows版
1. 至官方網站下載所需Go主程式版本:https://golang.org/dl/
本文所使用的版本及下載網址如下:
https://storage.googleapis.com/golang/go1.8.3.windows-amd64.zip
2. 將檔案解壓縮至指定的位置,本文是解壓縮至「D:\go」。
3. 設定「環境變數」的「系統變數」內容,如表2、圖1、圖2:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9jZjYyZjQxMS1kNWFjLTQ2NjItODdlOC04NWEyYTYwNzZiNDAucG5n&n=MjAxNzA5MjA0MjA4MDAyLnBuZw%3d%3d)
表2:系統變數
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9kMGYwOTRiNC0zOWFkLTQyMWEtOWM0ZC1lMDE2ODQzYzJjNTEucG5n&n=MjAxNzA5MjA0MjA4MDAzLnBuZw%3d%3d)
圖1:GOPATH變數及GOROOT變數設定畫面
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9jYjdlYWExNS1mMTVjLTRlY2MtYTQxNy0zZGYwNDNmNTIzNDEucG5n&n=MjAxNzA5MjA0MjA4MDA0LnBuZw%3d%3d)
圖2:Path變數編輯畫面
4. 在使用「go version」指令,查詢Go主程式版本,如圖3:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9hNDMzMWQzYy00M2IwLTRmMGUtYjFjYS0xNDIxYzBkNjljMTAucG5n&n=MjAxNzA5MjA0MjA4MDA1LnBuZw%3d%3d)
圖3:go version查詢結果畫面
開發工具:LiteIDE
1. 至官方網站下載所需LiteIDE版本:https://sourceforge.net/projects/liteide/files/X32.2/
本文所使用的LiteIDE版本及下載網址如下:
https://sourceforge.net/projects/liteide/files/X32.2/liteidex32.2.windows-qt5.zip/download
2. 將檔案解壓縮至指定的位置,本文是解壓縮至「D:\go_tools」。
3. 開啟LiteIDE工具,本文的執行檔路徑是:D:\go_tools\liteide\bin\liteide.exe,如圖4:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9hMTM3NGUwNC1mMmI5LTRmYTUtYThkMC1mNzQzM2Q4YWVjOWEucG5n&n=MjAxNzA5MjA0MjA4MDA2LnBuZw%3d%3d)
圖4:LiteIDE操作畫面
第一個Go程式(Basic.go)
1. 按「檔案」,選擇「New」,如圖5:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9jM2ZjZDc2MC0xNTYyLTQyZjQtOGE0YS1iNjFjMWI1MjJlOTkucG5n&n=MjAxNzA5MjA0MjA4MDA3LnBuZw%3d%3d)
圖5:選單畫面
2. 選擇「Go Source File」類別,名稱「Basic」,位置在「D:/go_code」,完成後按「OK」,如圖6:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9mYTI0NGYyOS04NjM3LTQ2NGQtODE3MC05NGYwMDczODE0NTMucG5n&n=MjAxNzA5MjA0MjA4MDA4LnBuZw%3d%3d)
圖6:建立文件畫面
3. 預設的「Basic.go」程式內容如下:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS8wNDNjNTE1OC0zOTNjLTQ5ZDctYWI0Ni04YjIwYjk2YmZkN2EucG5n&n=MjAxNzA5MjA0MjA4MDA5LnBuZw%3d%3d)
說明:
(1) package套件宣告,是用來組成與重複使用程式碼的方式,本範例並無須作變更。
(2) import引用fmt格式套件進行作I/O處理,可參閱:https://golang.org/pkg/fmt/
(3) func函式,名稱為main的函式是程式一開始就執行的部分,本例是Println印出Hello World!字串。
4. LiteIDE的執行結果,如圖7:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS85NTg3ZjIwMS0xMTlmLTQ2NTAtYjQyMi1hMjEzMDE0OGFhODYucG5n&n=MjAxNzA5MjA0MjA4MDEwLnBuZw%3d%3d)
圖7
5. 在命令提示字元使用go run Basic.go的執行結果,如圖8:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9lN2QzNDg5OC1jNGM4LTQ3ODktODE5Mi03NmIyNDQzOGNhM2QucG5n&n=MjAxNzA5MjA0MjA4MDExLnBuZw%3d%3d)
圖8
6. 編輯後的「Basic.go」檔案內容如下:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS81ZjAxMTI5Ny04NGQyLTRiM2YtOGM0My0zZjdlMWQzZjAwOWUucG5n&n=MjAxNzA5MjA0MjA4MDEyICgxKS5wbmc%3d)
7. 在命令提示字元使用go build Basic.go,編譯成Basic.exe執行檔,如圖9:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS80NjcyZmZlNS0wMDAyLTRkYjMtOWU5Ni1hY2JjZjdjYTdhNDMucG5n&n=MjAxNzA5MjA0MjA4MDEzLnBuZw%3d%3d)
圖9
8. 在命令提示字元執行Basic.exe執行檔,如圖10:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS8xYWY4MjI5Ny0yZGEwLTRkN2UtOWRiNS02NzY1M2U1Nzc3ZTMucG5n&n=MjAxNzA5MjA0MjA4MDEyICgxKS5wbmc%3d)
圖10
五子棋簡介
而根據《維基百科》的介紹,「五子棋」基本上是一種雙人對弈的棋類遊戲,先完成五子連線者即獲得勝利[4],在第一屆及第二屆五子棋世錦賽是採用《Gomoku-Pro規則》,而本文所開發的五子棋遊戲,亦需符合此規則,其內容說明如下:
1. 黑子在天元放第一子。
2. 白方下第二子。
3. 黑方在中央五乘五區域外放第三子。
4. 此後按一般標準的五子棋規則進行,即先完成五子連線者獲勝。
五子棋程式(Gomoku.go)
1. 使用的套件說明如下:
(1) fmt:基本I/O處理
(2) net/http:伺服器設定
(3) strconv:類別轉換
(4) strings:字串處理
更多說明可參閱:https://golang.org/pkg/
2. 程式碼內容如下:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS8wNGQ0YWUzNi05YmRlLTQxMGItYWI5Mi01NzgzYjcyZmFiMTIucG5n&n=MjAxNzA5MjA0MjA4MDE2LnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9lMzE3YmFlNC0zYzlmLTRmZjQtOWM3OC1jZGZmYzVkMjQzMTgucG5n&n=MjAxNzA5MjA0MjA4MDE3LnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS8xZWNmOWRhNy02MmIwLTRmZDAtOTI2NS1kOGYxOGU3MjQxY2YucG5n&n=MjAxNzA5MjA0MjA4MDE4LnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9jMzQzODgzZS00OWUzLTRmZTYtYTVlZi0xYWNkYmZlNmE2NjYucG5n&n=MjAxNzA5MjA0MjA4MDE5LnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9hMzljN2QwZS0xMjc3LTQwOTYtOGIxNC0yYjJkZjY0MzY0NWUucG5n&n=MjAxNzA5MjA0MjA4MDIwLnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS83MzQzOGNlNi0xYzJmLTQxYjctOThlNy03YTQyZjg2ZTZiNWEucG5n&n=MjAxNzA5MjA0MjA4MDIxLnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9mMGFkYjEwNC0zZTJjLTRmY2UtOTEzYy00N2FkZjViNTJmMjUucG5n&n=MjAxNzA5MjA0MjA4MDIyLnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9kMGQ0NGRlMy04NTAxLTQ2OTUtYTJkYS02MjhlNDE3NTM3Y2UucG5n&n=MjAxNzA5MjA0MjA4MDIzLnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9hY2MxNDYwYS1kMzQ0LTQ4ODQtYTIxNS00NGEyZDc3MjFkYzIucG5n&n=MjAxNzA5MjA0MjA4MDI0LnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS8wZWQwNDg5NS0zMTg5LTQ3OWQtODRjMy0zMGEyMTY5NGExYTEucG5n&n=MjAxNzA5MjA0MjA4MDI1LnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS8zYTkxNmMzMy1iNjBjLTQ5NDktODBiYi04MjRhZDJhMjRkYWUucG5n&n=MjAxNzA5MjA0MjA4MDI2LnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9jMWI1OTc4Zi1mOWNkLTQzMWEtODk0ZC04MGMzZDdjNzEyYWMucG5n&n=MjAxNzA5MjA0MjA4MDI3LnBuZw%3d%3d)
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS84MmQyNjZkOS1hMTdmLTQ1YWItYWQ0Yi00N2NlZjA5ZWYyZTIucG5n&n=MjAxNzA5MjA0MjA4MDI4LnBuZw%3d%3d)
3. 執行五子棋的Go遊戲程式
(1) 使用「go build Gomoku.go」編譯,再執行「Gomoku.exe」,如圖11:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS80ZmY3Njc1Yy01N2U5LTQ1ZTEtYTQwMC1kM2FlNGFmZjBjMGYucG5n&n=MjAxNzA5MjA0MjA4MDI4ICgxKS5wbmc%3d)
圖:11
(2) 讓Windows防火牆允許Gomoku.exe能使用8080連接埠,如圖12:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS81ZjVkOTVjZS1kODYxLTQ5YjktYThmMS0wNDgyYjg4ZDE2YjgucG5n&n=MjAxNzA5MjA0MjA4MDI4ICgyKS5wbmc%3d)
圖:12Windows安全性警訊
(3) 在Chrome上輸入「"http://localhost:8080"」預覽,如圖13、圖14:
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS81OWVkOGZmYy03NDlmLTRjYTQtYjAwMC1mNTk3ODk0ZDg4N2UucG5n&n=MjAxNzA5MjA0MjA4MDI4ICgzKS5wbmc%3d)
圖13:用Chrome瀏覽器執行
![](https://webpageprod-ws.ntu.edu.tw/Download.ashx?u=LzAwMS9VcGxvYWQvMzU0L2NrZmlsZS9lNzY5ODk1MS00ZTVhLTQyYTUtYWVkMC0wNDdkNTc5Yjk0NWQucG5n&n=MjAxNzA5MjA0MjA4MDI4ICg0KS5wbmc%3d)
圖14:若有任一方獲勝時
本文在撰寫時,其實沒有使用太多的Go程式套件,而是用了大量的字串處理。若是經常寫C#或VB.Net的人,會需要習慣沒有try-catch處理的機制,而是直接回傳2個值,當第2個值不是nil時,則代表回傳的是錯誤值。而它對函數使用方式變得嚴格,如「func xxx() {」,而不能將「{」放在下一行,所以經常會發生編譯錯誤是因為沒有符合使用方式。不過,因為Go程式套件讓一些服務變得簡單,例如本文所撰寫的Web服務,所以還是可以期待它未來的發展。
[1] Go。維基百科。檢上檢索日期:2017年08月01日。網址:https://zh.wikipedia.org/wiki/Go
[2] 張庭瑜(2017年01月16日)。TIOBE公布2016年度程式語言:熱門程度進步最多的Go奪冠、C語言「退步」最多。數位時代。檢上檢索日期:2017年08月01日。網址:https://www.bnext.com.tw/article/42761/tiobe-2016-program-language
[3] 吳柏毅(2017年01月14日)。從商業利益看 Go 程式語言。小惡魔–電腦技術–工作筆記–AppleBOY。檢上檢索日期:2017年08月01日。網址:https://blog.wu-boy.com/2017/01/business-benefits-of-go/
[4] 五子棋。維基百科。檢上檢索日期:2017年08月01日。網址:https://zh.wikipedia.org/wiki/%E4%BA%94%E5%AD%90%E6%A3%8B