開發(fā)環(huán)境搭建
go官網(wǎng) https://golang.org/
下載 https://golang.org/dl/
下載 go1.11.2.windows-amd64.msi安裝包唧瘾,雙擊安裝即可措译。
IDE工具
IntelliJ IDEA 安裝go插件
File-Setting-Pluigns,檢索go饰序,點(diǎn)擊install即可安裝领虹,安裝成功后重啟即可完成
新建Go項(xiàng)目
File-New-Project,選擇Go求豫,填寫項(xiàng)目信息
填寫項(xiàng)目名稱塌衰,選擇項(xiàng)目保存目錄,點(diǎn)擊Finish即可
新建Go File蝠嘉,選擇File-New-Go File
完成簡單的Hello world輸出
/**包聲明*/
package main
//引入包
import "fmt"
/**main函數(shù)定義*/
func main() {//go語法要求函數(shù)定義后緊跟的大括號必須跟在函數(shù)名后面最疆,不能回車到下一行
/**定義變量name,并賦初值*/
var name string = "feiyue"
// fmt.Println(...) 可以將字符串輸出到控制臺蚤告,并在最后自動增加換行字符 \n
fmt.Println("Hello world!","This is "+name)
}
//執(zhí)行結(jié)果
Hello world! This is feiyue
程序編寫完成后努酸,直接點(diǎn)擊main函數(shù)左側(cè)綠色按鈕運(yùn)行即可
Go 語言的基本構(gòu)成
包聲明
package main
定義了包名。Go語言要求必須在源文件中非注釋部分的第一行指明這個(gè)文件屬于哪個(gè)包杜恰,如:package main获诈。package main表示一個(gè)可獨(dú)立執(zhí)行的程序,每個(gè) Go 應(yīng)用程序都包含一個(gè)名為 main 的包心褐。引入包
import "fmt"
告訴 Go 編譯器這個(gè)程序需要使用 fmt 包的函數(shù)舔涎,fmt 包實(shí)現(xiàn)了格式化 IO(輸入/輸出)的函數(shù)。函數(shù)
func main()
是程序開始執(zhí)行的函數(shù)逗爹。main 函數(shù)是每一個(gè)可執(zhí)行程序所必須包含的亡嫌,一般來說都是在啟動后第一個(gè)執(zhí)行的函數(shù)(如果有 init() 函數(shù)則會先執(zhí)行該函數(shù))常量
常量是一個(gè)簡單值的標(biāo)識符,在程序運(yùn)行時(shí)掘而,不會被修改的量昼伴。
常量中的數(shù)據(jù)類型只可以是布爾型、數(shù)字型(整數(shù)型镣屹、浮點(diǎn)型和復(fù)數(shù))和字符串型圃郊。
常量的定義格式:const identifier [type] = value
顯式類型定義:const b string = "abc"
隱式類型定義:const b = "abc"
變量
Go 語言變量名由字母、數(shù)字女蜈、下劃線組成持舆,其中首個(gè)字母不能為數(shù)字。
聲明變量的一般形式是使用 var 關(guān)鍵字:
第一種伪窖,指定變量類型逸寓,聲明后若不賦值,使用默認(rèn)值覆山。var name string
第二種竹伸,根據(jù)值自行判定變量類型。var name = "feiyue"
第三種,根據(jù)指定變量名稱勋篓,變量類型吧享,并賦值。var name string = "feiyue"
第四種譬嚣,省略var, 使用:=
聲明變量并賦值钢颂,注意:=
左側(cè)的變量不應(yīng)該是已經(jīng)聲明過的,否則會導(dǎo)致編譯錯(cuò)誤拜银。d := 100
第五種:多變量聲明殊鞭,類型相同多個(gè)變量可以同時(shí)聲明,然后一起賦值
var a, b int
var c string
a, b, c = 2, 3, "abc"
語句 & 表達(dá)式
Go 程序中尼桶,一行代表一個(gè)語句結(jié)束操灿。每個(gè)語句不需要以分號 ; 結(jié)尾,這些工作都將由 Go 編譯器自動完成泵督。注釋
/*...*/
是多行注釋趾盐,在程序執(zhí)行時(shí)將被忽略。單行注釋是最常見的注釋形式幌蚊,可以在程序任何地方使用以//
開頭的單行注釋谤碳。多行注釋也叫塊注釋溃卡,均已以/*
開頭溢豆,并以*/
結(jié)尾,且不可以嵌套使用瘸羡,多行注釋一般用于包的文檔描述或注釋成塊的代碼片段漩仙。標(biāo)識符
標(biāo)識符用來命名變量、類型等程序?qū)嶓w犹赖。一個(gè)標(biāo)識符實(shí)際上就是一個(gè)或是多個(gè)字母(A~Z
和a~z
)數(shù)字(0~9
)队他、下劃線_
組成的序列,但是第一個(gè)字符必須是字母或下劃線而不能是數(shù)字峻村。
當(dāng)標(biāo)識符(包括常量麸折、變量、類型粘昨、函數(shù)名垢啼、結(jié)構(gòu)字段等等)以一個(gè)大寫字母開頭,如:Group1张肾,那么使用這種形式的標(biāo)識符的對象就可以被外部包的代碼所使用(客戶端程序需要先導(dǎo)入這個(gè)包)芭析,這被稱為導(dǎo)出(像面向?qū)ο笳Z言中的 public);標(biāo)識符如果以小寫字母開頭吞瞪,則對包外是不可見的馁启,但是他們在整個(gè)包的內(nèi)部是可見并且可用的(像面向?qū)ο笳Z言中的 protected )。行分隔符
在 Go 程序中芍秆,一行代表一個(gè)語句結(jié)束惯疙。每個(gè)語句不需要像 C 家族中的其它語言一樣以分號;
結(jié)尾翠勉,因?yàn)檫@些工作都將由 Go 編譯器自動完成。
如果你打算將多個(gè)語句寫在同一行螟碎,它們則必須使用;
人為區(qū)分眉菱,但在實(shí)際開發(fā)中并不鼓勵這種做法。
Go 語言數(shù)據(jù)類型
在 Go 編程語言中掉分,數(shù)據(jù)類型用于聲明函數(shù)和變量俭缓。
Go 語言按類別有以下幾種數(shù)據(jù)類型:Go 語言按類別有以下幾種數(shù)據(jù)類型:
序 號 | 類型 | 描述 |
---|---|---|
1 | 布爾型 | 布爾型的值只可以是常量 true 或者 false。var b bool = true
|
2 | 數(shù)字類型 | 整型 int 和浮點(diǎn)型 float32酥郭、float64华坦,Go 語言支持整型和浮點(diǎn)型數(shù)字,并且原生支持復(fù)數(shù)不从,其中位的運(yùn)算采用補(bǔ)碼惜姐。 |
3 | 字符串類型 | 字符串就是一串固定長度的字符連接起來的字符序列。Go的字符串是由單個(gè)字節(jié)連接起來的椿息。Go語言的字符串的字節(jié)使用UTF-8編碼標(biāo)識Unicode文本歹袁。 |
4 | 派生類型 | 包括:(a) 指針類型(Pointer)(b) 數(shù)組類型(c) 結(jié)構(gòu)化類型(struct)(d) Channel 類型(e) 函數(shù)類型(f) 切片類型(g) 接口類型(interface)(h) Map 類型 |
數(shù)字類型
整型:
序號 | 類型 | 描述 |
---|---|---|
1 | uint8 | 無符號 8 位整型 (0 到 255) |
2 | uint16 | 無符號 16 位整型 (0 到 65535) |
3 | uint32 | 無符號 32 位整型 (0 到 4294967295) |
4 | uint64 | 無符號 64 位整型 (0 到 18446744073709551615) |
5 | int8 | 有符號 8 位整型 (-128 到 127) |
6 | int16 | 有符號 16 位整型 (-32768 到 32767) |
7 | int32 | 有符號 32 位整型 (-2147483648 到 2147483647) |
8 | int64 | 有符號 64 位整型 (-9223372036854775808 到 9223372036854775807) |
浮點(diǎn)型:
序號 | 類型 | 描述 |
---|---|---|
1 | float32 | IEEE-754 32位浮點(diǎn)型數(shù) |
2 | float64 | IEEE-754 64位浮點(diǎn)型數(shù) |
3 | complex64 | 32 位實(shí)數(shù)和虛數(shù) |
4 | complex128 | 64 位實(shí)數(shù)和虛數(shù) |
其他數(shù)字類型
序號 | 類型 | 描述 |
---|---|---|
1 | byte | 類似 uint8 |
2 | rune | 類似 int32 |
3 | uint | 32 或 64 位 |
4 | int | 與 uint 一樣大小 |
5 | uintptr | 無符號整型,用于存放一個(gè)指針 |
Go 語言運(yùn)算符
運(yùn)算符用于在程序運(yùn)行時(shí)執(zhí)行數(shù)學(xué)或邏輯運(yùn)算寝优。
Go 語言內(nèi)置的運(yùn)算符有:
-
算術(shù)運(yùn)算符
Go語言算術(shù)運(yùn)算符包含以下7種条舔,如下表所示:
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
+ | 加 | A + B 輸出結(jié)果 30 |
- | 減 | A - B 輸出結(jié)果 -10 |
* | 乘 | A * B 輸出結(jié)果 200 |
/ | 除 | B / A 輸出結(jié)果 2 |
% | 求余 | B % A 輸出結(jié)果 0 |
++ | 自增 | A++ 輸出結(jié)果 11 |
-- | 自減 | A-- 輸出結(jié)果 9 |
代碼示例
var a int = 36
var b int = 10
var c int
//加法
c = a + b
fmt.Printf("a + b = %d\n", c )
//減法
c = a - b
fmt.Printf("a - b = %d\n", c )
//乘法
c = a * b
fmt.Printf("a * b = %d\n", c )
//除法
c = a / b
fmt.Printf("a / b = %d\n", c )
//求余
c = a % b
fmt.Printf("a對b求余 = %d\n", c )
//自增
a = 20
a++
fmt.Printf("a++后 a 的值為 %d\n", a )
//自減
a = 20
a--
fmt.Printf("a--后 a 的值為 %d\n", a )
//執(zhí)行結(jié)果
a + b = 46
a - b = 26
a * b = 360
a / b = 3
a對b求余 = 6
a++后 a 的值為 21
a--后 a 的值為 19
-
關(guān)系運(yùn)算符
關(guān)系運(yùn)算符分為以下6種
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
== | 檢查兩個(gè)值是否相等,如果相等返回 True 否則返回 False乏矾。 | (A == B) 為 False |
!= | 檢查兩個(gè)值是否不相等孟抗,如果不相等返回 True 否則返回 False。 | (A != B) 為 True |
> | 檢查左邊值是否大于右邊值钻心,如果是返回 True 否則返回 False凄硼。 | (A > B) 為 False |
< | 檢查左邊值是否小于右邊值,如果是返回 True 否則返回 False捷沸。 | (A < B) 為 True |
>= | 檢查左邊值是否大于等于右邊值摊沉,如果是返回 True 否則返回 False。 | (A >= B) 為 False |
<= | 檢查左邊值是否小于等于右邊值痒给,如果是返回 True 否則返回 False说墨。 | (A <= B) 為 True |
代碼示例
var a int = 36
var b int = 20
// == 等于
fmt.Println("a == b ",a == b )
fmt.Println("a != b ",a != b )
// < 小于
fmt.Println("a < b ",a < b )
// > 大于
fmt.Println(" a > b ",a > b )
// <= 小于等于
fmt.Println("a <= b ",a <= b )
// >= 大于等于
fmt.Println("b >= a ",b >= a )
//執(zhí)行結(jié)果
a == b false
a != b true
a < b false
a > b true
a <= b false
b >= a false
-
邏輯運(yùn)算符
邏輯運(yùn)算符有3種,分別是與(&&
)侈玄、或(||
)婉刀、非(!
)
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
&& |
邏輯 AND 運(yùn)算符。 如果兩邊的操作數(shù)都是 True序仙,則條件 True突颊,否則為 False。 | (A && B) 為 False |
|| |
邏輯 OR 運(yùn)算符。 如果兩邊的操作數(shù)有一個(gè) True律秃,則條件 True爬橡,否則為 False。 | (A || B) 為 True |
! |
邏輯 NOT 運(yùn)算符棒动。 如果條件為 True糙申,則邏輯 NOT 條件 False,否則為 True船惨。 | !(A && B) 為 True |
代碼示例
var a bool = true
var b bool = false
fmt.Println("a && b = ",a && b )
fmt.Println("a || b = ",a || b )
fmt.Println(" !a = " , !a)
//執(zhí)行結(jié)果
a && b = false
a || b = true
!a = false
-
位運(yùn)算符
位運(yùn)算符對整數(shù)在內(nèi)存中的二進(jìn)制位進(jìn)行操作柜裸,包括五個(gè)位運(yùn)算符 按位與&
、按位或|
粱锐、按位異或^
疙挺、左移運(yùn)算符<<
、右移運(yùn)算符>>
Go 語言支持的位運(yùn)算符如下表所示怜浅。假定 A 為60铐然,B 為13:A = 0011 1100 B = 0000 1101
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
& | 按位與運(yùn)算符"&"是雙目運(yùn)算符。 其功能是參與運(yùn)算的兩數(shù)各對應(yīng)的二進(jìn)位相與恶座。 | (A & B) 結(jié)果為 12, 二進(jìn)制為 0000 1100 |
| | 按位或運(yùn)算符"|"是雙目運(yùn)算符搀暑。 其功能是參與運(yùn)算的兩數(shù)各對應(yīng)的二進(jìn)位相或 | (A | B) 結(jié)果為 61, 二進(jìn)制為 0011 1101 |
^ | 按位異或運(yùn)算符"^"是雙目運(yùn)算符。 其功能是參與運(yùn)算的兩數(shù)各對應(yīng)的二進(jìn)位相異或跨琳,當(dāng)兩對應(yīng)的二進(jìn)位相異時(shí)自点,結(jié)果為1。 | (A ^ B) 結(jié)果為 49, 二進(jìn)制為 0011 0001 |
<< | 左移運(yùn)算符"<<"是雙目運(yùn)算符湾宙。左移n位就是乘以2的n次方樟氢。 其功能把"<<"左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位冈绊,由"<<"右邊的數(shù)指定移動的位數(shù)侠鳄,高位丟棄,低位補(bǔ)0死宣。 | A << 2 結(jié)果為 240 伟恶,二進(jìn)制為 1111 0000 |
>> | 右移運(yùn)算符">>"是雙目運(yùn)算符。右移n位就是除以2的n次方毅该。 其功能是把">>"左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位博秫,">>"右邊的數(shù)指定移動的位數(shù)。 | A >> 2 結(jié)果為 15 眶掌,二進(jìn)制為 0000 1111 |
按位與&
挡育、按位或|
、按位異或^
的二進(jìn)制運(yùn)算表如下所示:
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
-
賦值運(yùn)算符
賦值運(yùn)算符是算術(shù)運(yùn)算朴爬、位運(yùn)算基礎(chǔ)上加上賦值=
結(jié)合而成的運(yùn)算符
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
= | 簡單的賦值運(yùn)算符即寒,將一個(gè)表達(dá)式的值賦給一個(gè)左值 | C = A + B 將 A + B 表達(dá)式結(jié)果賦值給 C |
+= | 相加后再賦值 | C += A 等于 C = C + A |
-= | 相減后再賦值 | C -= A 等于 C = C - A |
*= | 相乘后再賦值 | C *= A 等于 C = C * A |
/= | 相除后再賦值 | C /= A 等于 C = C / A |
%= | 求余后再賦值 | C %= A 等于 C = C % A |
<<= | 左移后賦值 | C <<= 2 等于 C = C << 2 |
>>= | 右移后賦值 | C >>= 2 等于 C = C >> 2 |
&= | 按位與后賦值 | C &= 2 等于 C = C & 2 |
^= | 按位異或后賦值 | C ^= 2 等于 C = C ^ 2 |
|= | 按位或后賦值 | C |= 2 等于 C = C | 2 |
- 其他運(yùn)算符
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
& | 返回變量存儲地址 | &a; 將給出變量的實(shí)際地址。 |
* | 指針變量。 | *a; 是一個(gè)指針變量 |
運(yùn)算符優(yōu)先級
有些運(yùn)算符擁有較高的優(yōu)先級母赵,二元運(yùn)算符的運(yùn)算方向均是從左至右逸爵。下表列出了所有運(yùn)算符以及它們的優(yōu)先級,由上至下代表優(yōu)先級由高到低:
簡單記就是:凹嘲! > 算術(shù)運(yùn)算符 > 關(guān)系運(yùn)算符 > && > || > 賦值運(yùn)算符
優(yōu)先級 | 分類 | 描述 | 關(guān)聯(lián)性 |
---|---|---|---|
1 | 后綴 |
() [] -> . ++ --
|
左到右 |
2 | 一元 |
+ - ! ~ ++ -- (type)*&sizeof
|
右到左 |
3 | 乘除师倔、求余 |
* / %
|
左到右 |
4 | 加減 |
+ -
|
左到右 |
5 | 移位 |
<< >>
|
左到右 |
6 | 關(guān)系 |
< <= > >=
|
左到右 |
7 | 相等 |
== !=
|
左到右 |
8 | 按位與 | & |
左到右 |
9 | 按位異或 | ^ |
左到右 |
10 | 按位或 | | |
左到右 |
11 | 邏輯AND | && |
左到右 |
12 | 邏輯OR | || |
左到右 |
13 | 條件 | ?: |
右到左 |
14 | 賦值 |
= += -= *= /= %= >>= <<= &= ^= |=
|
右到左 |
15 | 逗號 | , |
左到右 |