對於通常的語言使用者來講 ,20% 的語言特性就可以知足 80% 的使用需求,剩下在使用中掌握。ios
基於這一理論,Go 基礎系列的文章不會刻意追求面面俱到,但該有知識點都會覆蓋,目的是帶你快跑遇上 Golang 這趟新車。程序員
Hurry up , Let's go !golang
Go 的語法相似 C 語言,你是從 C/C++ 語言過來的話學習成本很低,其餘語言過來甚至沒有編程基礎也不要緊,這門語言入門很輕鬆。編程
好消息是你的鍵盤得救了,在 Go 的世界裏不用在每一個語句後面加分號了,C 和C++ 程序員聽了喜大普奔,鍵盤不那麼容易磨損了。函數
壞消息帶給習慣花括號換行的朋友,在 Go 中第一個花括號 {
不能換行寫,必須寫在同一行,不然編譯不過!學習
潛規則是任何在 Go 中定義的變量必須使用,若是定義了變量不使用,編譯不過!ui
怎麼樣?是否是感受到滿滿的霸道總裁味道?操作系統
其實約束多了,程序員自由發揮的空間變少,出錯的機率也會大大下降,Google 的大佬們怕你犯錯,操碎了心。code
Go 語言程序都由包構成,相似其餘語言中的模塊概念,主程序都從 main 包開始運行。對象
因此一個程序開頭是下面的語句:
package main
在程序中也能夠導入其餘包,這樣就可使用其餘包定義的函數或變量。
導入包語法有多種姿式。
import os // 導入 os 包 import fmt /* 導入 fmt 包*/
fmt 包:包內有格式化 IO 函數,相似 C 中的 stdio.h
和 C++ 中的 iostream
,初學者必備,導它!
os 包 :中實現了一些 操做系統函數,不依賴平臺的接口
另外,關於註釋,如你所見,徹底就是 C 語言裏的註釋形式,//
或 /**/
都是容許的。
import ( "fmt" "os" )
能夠把須要的包,用括號放在一塊兒導入。
能夠在導入的時候指定導入包的別名,這樣在調用包函數的時候,能夠直接使用包別名。
import f "fmt" // 用別名f 代替 fmt f.Println("go go go") // 用 f 代替了 fmt 調用 Println 函數
包中定義的函數或變量,若是是大寫字母開頭,那麼它就是能夠導出的,外部使用包的用戶能夠訪問到,相似 C++ 中的 public
標識。相反,小寫字母開頭的名字外部沒法使用,使用會報錯。
// 以下,Println 和 Getenv 都是大寫的名字 fmt.Println(os.Getenv("GOPATH"))
Go 語言內建的數據類型有下面這些,其實基本上看類型名字,就差很少能知道是什麼類型了。
int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error
日常用的最多的類型:
int
表明整型,在 32 位系統上一般爲 32 位,在 64 位系統上則爲 64 位。
string
字符串類型
bool
布爾類型,分 true
和 false
兩種值。
下面的語法建立一個新的類型,相似C++中的typedef語法。
type 新類型名字 底層類型
type ProgramType string // 定義新類型 ProgramType var t1 ProgramType = "Golang" var t2 ProgramType = "C++"
不過Go中建立的新類型即便底層類型是一致的也不能相互操做,這樣起到很好的類型隔離做用。
好比下面的代碼,雖然ProgramType
和 CompanyType
都是 string
類型,可是不能相互操做,下面舉例說明:
type ProgramType string // 定義新類型 ProgramType type CompanyType string // 定義新類型 ProgramType var t2, t2 ProgramType = "Golang", "C++" var c1, c2 CompanyType = "Google", "Tencent" fmt.Println(t1+t2) // 同類型相加合法 fmt.Println(t1+c1) // 不一樣類型相加非法
不像 C 中有隱式類型轉換,在 Go 中 不一樣類型的項之間賦值時須要顯式轉換,不然編譯會報錯!語法上,相對於 C 語言的強制轉換語法換了下括號的位置,Go 語法以下。
T(v) // 把值 v 轉換爲類型 T
舉例:
var varint int = 66 var varf float32 = float32(varint) // int 轉換 float32 fmt.Printf("%T %v %T %v \n", varint, varint, varf, varf) // %T輸出值的類型 %v輸出值
Go 裏面的變量聲明其實和 C 語言差很少,惟一的區別是把變量類型放在在變量名字後面,另外多了一個 var
關鍵字標識。
var imVar int // 聲明瞭一個 int 類型的 imVar 變量
固然也能夠多個同類型變量一塊兒聲明
var imVar1, imVar2, imVar3 int // 一口氣聲明瞭三個 int 類型的變量
或者,多個不一樣類型的變量聲明分組一塊兒聲明
var ( i int b bool s string )
未初始化的對象會被賦予零值,也就是默認值。
0
false
""
(空字符串)能夠聲明以後單個初始化
var imVar int imVar = 6
也能夠聲明和初始化一步到位
var imVar0 int = 7
還能夠批量聲明加初始化一步到位
var imVar4, imVar5 int = 4, 5
多個不一樣類型的變量聲明和初始化能夠分組同時進行,像下面這樣。
var ( i int = 1 b bool = false s string = "golang" )
若是初始化式右邊的值是已存在肯定類型的值,能夠偷懶省略變量類型,聰明的 Go 會自動推導類型。
var imVar4, imVar5 = 4, 5 // 省略了左邊的 int 類型,自動推導imVar4, imVar5是int類型
在函數內部,可使用簡短賦值語句:=
來代替 var
關鍵字聲明並初始化變量。
imVar6, imVar7 := 8, 9 // 聲明並初始化了 imVar6, imVar7
常量用 const
關鍵字聲明,而且聲明以後必須緊接着賦值,常量能夠是字符、字符串、布爾值或數值 ,注意:常量不能用 :=
語法聲明 。
const imCnt int = 1 // 帶類型的常量定義 const imCnt1 = 1 // 省略類型的常量定義,自動推導類型
Go 語言內建下面幾種常量
true false iota nil // 內建常量
函數用關鍵字 func
來聲明,帶參數列表,把返回值類型放在最後,下面定義了一個簡單的乘法函數,帶兩個整型參數,返回值也是整型。
func mult(i int, j int) int { return i * j }
當函數參數類型相同時,能夠只寫最後一個參數的類型,下面這樣簡寫也是能夠的。
func mult(i, j int) int { return i * j }
函數返回值能夠是一個,也能夠是多個,下面的函數就返回了 i
的平凡和 j
的平方兩個返回值。
func more(i, j int) (int, int) { return i * i, j * j }
前面例子只指定了返回值類型,能夠指定返回值名稱,這樣更加便於理解,同時,指定的名稱可在函數內使用。
func retName(i, j int) (x, y int) { x = i * i y = j * j return x, y // 可用 return 代替,表示返回全部已命名的返回值。 }
經過本文的學習,咱們掌握了 Golang 中的幾個基礎概念和用法:包、基本數據類型、變量、常量、函數。這些語法基礎是Golang 的下層建築,萬丈高樓平地起,本節爲後續學習打下了基礎。
感謝各位的閱讀,文章的目的是分享對知識的理解,技術類文章我都會反覆求證以求最大程度保證準確性,若文中出現明顯紕漏也歡迎指出,咱們一塊兒在探討中學習.
今天的技術分享就到這裏,咱們下期再見。
原創不易,不想被白票,若是在我這有收穫,就動動手指點個「在看」或給個「轉發」是對我持續創做的最大支持。