[Go] Go 語言學習筆記- 語法| CK's Notepad
文章推薦指數: 80 %
Go 這語言出來也好一段時間了,由於本身後端都是用C# 在開發,一直都沒有很大的動機學習另外一個後端語言。
趁著這次GDG 台中12 月份的大活動,來學習 ...
Go這語言出來也好一段時間了,由於本身後端都是用C#在開發,一直都沒有很大的動機學習另外一個後端語言。
趁著這次GDG台中12月份的大活動,來學習一波Go吧
歷史
Go是由Google和眾多的貢獻者一起發展的開源專案(BSD-style授權)
安裝
依官網的安裝文件安裝,基本上是沒有問題的。
編輯器的部分可以使用VSCode+Go的擴充套建,或是使用JetBrainsGoLand編輯器(商用)
HelloWorld
第一個Go的程式
12345678//hello-world.gopackagemainimport"fmt"funcmain(){ fmt.Println("Hello,world")}
透過下指令的方式就可以執行Go檔案,gorunhello.world.go
要將Go建置成可以跑執行檔,執行gobuildhello.world.go之後,就可以執行./hello-word
如果要將Go打包成全域可使用的話,可透過goinstall的語法,但要使用這個前置條件是GOBIN的環境變數要設定,windows就加入一個環境參數GOBIN並設定一個資料夾即可
基本語法
packages
go世界裡,每一個go檔案都會歸屬到一個packages裡面,就拿上面的hello-world來看
12packagemain....
要使用其他package就需要透過import
1234import("fmt""math")
當package被import時,就可以使用該package內第一個為大寫的functions。
換句話說,如果functions的名稱第一個是小寫的,就不會被export出去
上圖為使用小寫functions時會出現的錯誤訊息,當改使用大寫的functions,則會是這個結果
functions
Go的functions也是要定型別的,只是定型別的順序跟常見的C#等語言不太一樣
123funcadd(xint,yint)int{ returnx+y}
型別都定義在後方,當連續的參數都是同一型別時,也可以這樣寫
123funcadd(x,yint)int{returnx+y}
Go另外一個比較特別的地方就是function允許回傳多個值
12345678funcswap(x,ystring)(string,string){returnx,y}funcmain(){a,b:=swap("hello","world")//a=world,b=hello}
換另外一種命名方式回傳(但不太建議這樣子使用)
12345funcsplit(sumint)(x,yint){ x=sum*4/9 y=sum-x return}
variables
可愛的var又來了
123456789packagemainimport"fmt"varc,python,javaboolfuncmain(){ variint fmt.Println(i,c,python,java)}
設定預設值的方式,就在後面一順序給要的預設值就可以了,Go會依預設值自行推斷型別
1varc,python,java=true,false,"no!"
另外一種簡化的宣告方式,使用:=
123456789101112//原本的做法funcmain(){ varresultint result=add(1,2) fmt.Println(result)}//使用:=語法糖funcmain(){ result:=add(1,2) fmt.Println(result)}
basictypes
bool
string
intint8int16int32int64
uintuint8uint16uint32uint64uintptr
byte//aliasforuint8
rune//aliasforint32,representsaUnicodecodepoint
float32float64
complex64complex128
defaultValue
各型別如果沒有給予設值的系統預設值為
string=>「」
bool=>false
數字型=>0
如果要轉型的話,可以這樣子操作T(v)會將valuev轉換成T型別
123variint=42varffloat64=float64(i)varuuint=uint(f)
consts
使用const宣告常數值,常數值不能使用:=宣告
1constPi=3.14
流程控制
for
for迴圈的基本起手式,不需要小括弧,但大括弧是必要的
12345678funcmain(){ sum:=0 fori:=0;i<10;i++{ sum+=i } fmt.Println(sum)}
go版本的while,仍是用for表示
12345sum:=1 forsum<1000{ sum+=sum } fmt.Println(sum)
永不停止的寫法,還是用for
123for{...}
if
條件判斷應該是最基本的,只是不需要小括弧,但大括弧是必要的
123ifx<0{ returnsqrt(-x)+"i"}
更懶惰但要習慣的寫法是,在if內做變數指定
123456funcpow(x,n,limfloat64)float64{ ifv:=math.Pow(x,n);v
延伸文章資訊
- 1深入學習Go語言 - 博客來
書名:深入學習Go語言,語言:簡體中文,ISBN:9787111630722,頁數:259,出版社:機械工業出版社,作者:李曉鈞,出版日期:2019/08/01,類別:電腦資訊.
- 2初學Golang 30 天(一)認識Go - iT 邦幫忙
Go 語言是由Google 開發的開放原始碼項目,目的之一為了提高開發人員的程式設計效率。 Go 語言語法靈活、簡潔、清晰、高效。 ... 為什麼要學習Go.
- 3使用Go 邁出您的第一步- Learn
想要學習程式設計語言但不確定要如何開始嗎? 從這裡開始! 了解使用Go 建置簡單程式所需的基本語法與想法。
- 4Go 语言学习路线指南 - LearnKu
网上的Golang 资料虽然不多,但是也不少,这个我的一个学习路线,从简单内容开始,可以作为参考。 第一步Go 语言之旅#. 这个是一个官方的入门教程,或者说只是一个大概了解 ...
- 5[Day 2] -『 GO語言學習筆記』- GO語言簡介 - iT 邦幫忙
GO語言簡介Go(Golang)是Google開發的一種語言。2007年,Google設計Go原先目的在於提高在多核、網路機器(networked machines)、大型代碼 ...