首先介紹下GO語言的起源
Go語言是一個開源的編程語言,它能讓構造簡單,可靠且高效的軟件變得容易。
GO是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發。2009年11月開源,在2012年早些時候發布了GO 1穩定版本。現在GO的開發已經是完全開放的,并且擁有一個活躍的社區。
Go語言最主要的特性
- 自動垃圾回收
- 更豐富的內置類型
- 函數多返回值
- 錯誤處理
- 匿名函數和閉包
- 類型和接口
- 并發編程
- 反射
- 語言交互性
Go語言結構
在學習之前先來了解下Go語言最簡單程序結構。
Go語言的基礎組成有一下幾個部分
- 包聲明
- 引入包
- 函數
- 變量
- 語句&表達式
- 注釋
package main
import "fmt"
func main(){
fmt.Println("My,first Go applition")
}
讓我們來看下以上程序的各個部分
-
package main
定義了包名,你必須在源文件中非注釋的第一行指明這個文件屬于哪個包,每個Go應用程序都包含一個名為main的包。 -
import "fmt"
是告訴Go編輯器這個程序需要使用fmt包(的函數,或其他元素),fmt包實現了格式化IO(輸入/輸出)的函數。 -
func main()
是程序開始執行的函數。main函數是每一個可執行程序所必須包含的,一般來說都是在啟動后第一個執行的函數(如果有init()
函數則會先執行該函數) -
/*...*/
是Go語言的注釋標識。 -
fmt.Println(...)
可以將字符串輸出到控制臺,并在最后自動增加換行字符 \n,使用fmt.Print("My,first Go applition\n")
可以得到相同的結果。 - 當標識符(包括常量、變量、類型、函數名、結構字段等等)以一個大寫字母開頭,如:Group1,那么使用這種形式的標識符的對象就可以被外部包的代碼所使用(客戶端程序需要先導入這個包),這被稱為導出(像面向對象語言中的 public);標識符如果以小寫字母開頭,則對包外是不可見的,但是他們在整個包的內部是可見并且可用的(像面向對象語言中的 protected )。
Go語言基礎語法
Go標記
Go 程序可以由多個標記組成,可以是關鍵字,標識符,常量,字符串,符號。如以下 GO 語句由 6 個標記組成:
fmt.Println("Hello, World!")
1. fmt
2. .
3. Println
4. (
5. "Hello, World!"
6. )
行分隔符
在 Go 程序中,一行代表一個語句結束。每個語句不需要像 C 家族中的其它語言一樣以分號 ; 結尾,因為這些工作都將由 Go 編譯器自動完成。
如果你打算將多個語句寫在同一行,它們則必須使用 ; 人為區分,但在實際開發中我們并不鼓勵這種做法。
標識符
標識符用來命名變量、類型等程序實體。一個標識符實際上就是一個或是多個字母(AZ和az)數字(0~9)、下劃線_組成的序列,但是第一個字符必須是字母或下劃線而不能是數字。
//有效的標識符
mahesh kumar abc move_name a_123
myname50 _temp j a23b9 retVal
//無效的標識符
123asd //(以數字開頭)
case //(Go 語言的關鍵字)
a+b //(運算符是不允許的)
關鍵字
下面列舉了 Go 代碼中會使用到的 25 個關鍵字或保留字
break | default | func | interface | select |
---|---|---|---|---|
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
除了以上介紹的這些關鍵字,Go 語言還有 36 個預定義標識符
append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 |
---|---|---|---|---|---|---|---|---|
copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 |
int32 | int64 | iota | len | make | new | nil | panic | uint64 |
println | real | recover | string | true | uint | uint8 | uintptr |
程序一般由關鍵字、常量、變量、運算符、類型和函數組成。
程序中可能會使用到這些分隔符:括號 (),中括號 [] 和大括號 {}。
程序中可能會使用到這些標點符號:.、,、;、: 和 …
Go 語言的空格
Go 語言中變量的聲明必須使用空格隔開
var age int;
Go語言結構小結
導入多包時
import "fmt"
import "io"
//也可以
import {
"fmt",
"io"
}
Go 程序的一般結構: basic_structure.go
//當前程序包名
package main
//導入其他包
import "fmt"
//常量定義
const PI = 3.14
//全局變量聲明
var name = "duxian"
//一般類型聲明
type newType int
//結構的聲明
type gopher struct()
//接口的聲明
type golang interface()
//由main函數作為程序入口點啟動
func main(){
Println(name)
}
GO語言的數據類型
在Go編程語言中,數據類型用于聲明函數和變量。
數據類型的出現是為了把數據分成所需內存大小不同的數據,編程的時候需要用大數據的時候才需要申請大內存,就可以充分利用內存。
Go語言按類別有以下幾種數據類型
- 布爾型
布爾型的值只可以是常量 true 或者 false。一個簡單的例子:var b bool = true。 - 數字類型
整型 int 和浮點型 float32、float64,Go 語言支持整型和浮點型數字,并且原生支持復數,其中位的運算采用補碼。 - 字符竄類型
Go語言的字符串的字節使用UTF-8編碼標識Unicode文本 - 派生類型
- 指針類型
- 數組類型
- 結構化類型
- Channel類型
- 函數類型
- 切片類型
- 接口類型
- Map類型
數字類型
整數型
- uint8
無符號 8 位整型 (0 到 255) - uint16
無符號 16 位整型 (0 到 65535) - uint32
無符號 32 位整形 (0 到 4294967295) - uint64
無符號 64 位整型 (0 到 18446744073709551615) - int8
有符號 8 位整型 (-128 到 127) - int16
有符號 16 位整型 (-32768 到 32767) - int32
有符號 32 位整型 (-2147483648 到 2147483647) - int64
有符號 64 位整型 (-9223372036854775808 到 9223372036854775807)
浮點型
- float32
IEEE-754 32位浮點型數 - float64
IEEE-754 64位浮點型數 - complex64
32 位實數和虛數 - complex128
64 位實數和虛數
其他數字類型
- byte
類似 uint8 - rune
類似 int32 - uint
32 或 64 位 - int
與 uint 一樣大小 - uintptr
無符號整型,用于存放一個指針
Go語言變量
變量來源于數學,是計算機語言中能存儲計算結果或能表示值抽象概念。變量可以通過變量名訪問。
Go 語言變量名用字母,數字,下劃線組成。其中首字母不能使數字。
聲明變量的一般形式是使用var關鍵字
var identifier type
變量聲明
//第一種,指定變量類型,聲明后若不賦值,使用默認值。
var v_name v_type
v_name = value
//第二種,根據值自行判定變量類型。
var v_name = value
//第三種,省略var, 注意 :=左側的變量不應該是已經聲明過的,否則會導致編譯錯誤。
v_name := value
//// 例如
var a int = 10
var b = 10
c := 10
多變量聲明
//類型相同多個變量, 非全局變量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
var vname1, vname2, vname3 = v1, v2, v3 //和python很像,不需要顯示聲明類型,自動推斷
vname1, vname2, vname3 := v1, v2, v3 //出現在:=左側的變量不應該是已經被聲明過的,否則會導致編譯錯誤
// 這種因式分解關鍵字的寫法一般用于聲明全局變量
var (
vname1 v_type1
vname2 v_type2
)
值類型和引用類型
所有像 int、float、bool 和 string 這些基本類型都屬于值類型
簡短形式,使用 := 賦值操作符
全局變量是允許聲明但不使用,但是函數內變量聲明后必須使用否則會得到錯誤 “變量 declared and not used”