Go 語言教程筆記(一)
一 Go 語言環(huán)境設(shè)置
本地環(huán)境設(shè)置
在這里我們介紹設(shè)置Go編程語言環(huán)境,需要在你的計算機上的準(zhǔn)備以下兩個軟件,(A)文本編
輯器和(B)Go編譯器。
文本編輯器
我的環(huán)境是ubuntu,直接用 vim
Go編譯器
ubuntu下面直接安裝
# apt-get install golang
例子:
# vim hello.go
1 package main
2
3 import fmt "fmt"
4
5 func main() {
6 fmt.Printf("Hello, world; or Καλημέρα κόσμε; or こんにちは 世界 ");
7 }
go語言中如果有if等后面需要跟大括號的語句,強制使用大擴號跟if寫在一行。
編譯運行:
# go run hello.go
Hello, world; or Καλημέρα κόσμε; or こんにちは 世界
二 Go 語言程序結(jié)構(gòu)
在我們學(xué)習(xí)Go編程語言的基本構(gòu)建模塊,看看一個最低限度的Go程序結(jié)構(gòu),這樣我們
就可以把它作為即將到來的章節(jié)的參考。
Go 程序包含以下部分:
包聲明
導(dǎo)入包
函數(shù)
變量
語句和表達式
注釋
例如:
1 package main
2
3 import fmt "fmt"
4
5 func main() {
6 fmt.Printf("Hello, world; or Καλημέρα κόσμε; or こんにちは 世界 ");
7 }
第一行定義了這個程序包的名稱。這是一個必須聲明為Go程序運行在什么包。main包是起始
點來運行程序。每個包都有一個與之關(guān)聯(lián)的路徑和名稱。
下一行import "fmt" 是告訴編譯器去包含文件在包fmt的預(yù)處理命令。
下一行 func main()主要功能是為程序執(zhí)行的開始。
如果有注釋,/*...*/會被編譯器被忽略,它已被加入到程序添加注釋。因此,這樣的行稱為程
序中的注釋。注釋也使用//類似于Java或C++注釋。
下一行 fmt.Println(...)是提供另一種功能,使消息“Hello, World!”要顯示在屏幕上。這
里fmt包已導(dǎo)出。
三 Go 語言的基本語法
標(biāo)識符
Go語言不允許標(biāo)識符中的標(biāo)點字符,如@,$和%。
Go是一種區(qū)分大小寫的編程語言
Manpower 和 manpower 在Go中是兩個不同的標(biāo)識符
標(biāo)識符開始以字母A到Z或a到z或下劃線_后跟零個或多個字母,下劃線和數(shù)字(0?9)
關(guān)鍵詞
下面的列表顯示了Go的保留字。這些保留的字可以不被用作常量或變量,或任何其他的標(biāo)識符
名稱。
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 中空白格
僅包含空格,可能與注釋行,被稱為一個空行,Go編譯器完全忽略它。
var age int;
必須有至少一個空白字符(通常是一個空格)int和age之間的編譯器,以便能夠區(qū)分它們
fruit = apples + oranges; // get the total fruit
fruit和=之間或=和apples,雖然是自由的,如果想便于閱讀的目的,最好包括一些空格
四 Go 語言數(shù)據(jù)類型
在Go編程語言,數(shù)據(jù)類型指用于聲明變量或不同類型的功能的廣泛的系統(tǒng)。變量的類型決定了
有多少空間占用的存儲和存儲方式的位模式將被解釋。
Go的數(shù)據(jù)類型可分類如下:
Boolean Types
它們是布爾類型,它由兩個預(yù)定義的常量:(a) true (b) false
Numeric Types
它們是算術(shù)類型,表示整數(shù)類型或b。在整個程序浮點值
string types:
一個字符串類型代表組字符串值。它的值是一個字節(jié)序列。字符串是一次創(chuàng)造了穩(wěn)定的類型,
這是不可能改變一個字符串的內(nèi)容。預(yù)聲明的字符串類型為字符串。
Derived types:
它們包括:(a)指針類型,(b)數(shù)組類型,(c)結(jié)構(gòu)類型,(d)聯(lián)盟類型及(e)函數(shù)類型(f)切片類(g)
函數(shù)類型(h)接口類型(i)地圖類型(j)管道類型。
數(shù)組類型和結(jié)構(gòu)類型被統(tǒng)稱為聚合類型。函數(shù)的類型指定的一組具有相同的參數(shù)和結(jié)果類型所
有函數(shù)。
整數(shù)
1 uint8
8位無符號整數(shù) (0 - 255)
2 uint16
16位無符號整數(shù) (0 - 65535)
3 uint32
32位無符號整數(shù) (0 - 4294967295)
4 uint64
64位無符號整數(shù) (0 - 18446744073709551615)
5 int8
有符號8位整數(shù) (-128 - 127)
6 int16
有符號16位整數(shù) (-32768 - 32767)
7 int32
有符號的32位整數(shù) (-2147483648 - 2147483647)
8 int64
有符號的64位整數(shù) (-9223372036854775808 - 9223372036854775807)
浮點類型
1 float32
IEEE-754 32-bit 浮點數(shù)
2 float64
IEEE-754 64-bit 浮點數(shù)
3 complex64
復(fù)數(shù)與float32實部和虛部
4 complex128
復(fù)數(shù)與float64實部和虛部
其他數(shù)值類型
1 byte
相同于 uint8
2 rune
相同于 int32
3 uint
32 或 64 位
4 int
相同于 uint 的大小
5 uintptr
一個無符號整數(shù)來存儲指針值的解釋的比特位
五 Go 語言變量
變量是什么,只不是給定到存儲區(qū)域,我們的程序可以操縱的名稱。在Go中每個變量具有特定
的類型,它確定的大小和可變的存儲器的布局;能確定存儲器內(nèi)存儲的值的范圍;和組操作可以施
加到變量。
一個變量名可以由字母,數(shù)字和下劃線。它必須以字母或下劃線。大寫和小寫字母是不同的,因
為Go是區(qū)分大小寫的。基于該基本類型在前面的章節(jié)中說明的那樣,將有以下基本變量類型:
byte 通常單個字節(jié)(一個字節(jié)),這是一個字節(jié)的類型
int 整數(shù)最自然的尺寸的機器
float32 單精度浮點值
Go編程語言也可以定義各種其他類型的變量,我們將在以后的章節(jié)列出,如:枚舉,指針,數(shù)
組,結(jié)構(gòu),聯(lián)合,等等。
Go中變量定義
var variable_list optional_data_type;
optional_data_type可以包括字節(jié),整型,float32,complex64,布爾或任何用戶定義的對象
等有效Go的數(shù)據(jù)類型,variable_list可以由用逗號分隔的一個或多個標(biāo)識符名稱。一些有效的聲
明如下所示:
var i, j, k int;
var c, ch byte;
var f, salary float32;
d = 42;
var i, j, k; 既聲明并定義了變量i,j和k;這指示編譯器創(chuàng)建一個名為i,j和k的 int類型變量。變量
可以再聲明時候初始化。變量的類型是由編譯器自動根據(jù)傳遞給它的值判斷。
variable_name = value;
d = 3, f = 5; // declaration of d and f. Here d and f are int
對于沒有初始化定義:具有靜態(tài)存儲時間變量的隱含零初始化(所有字節(jié)的值為0);所有其它變量
的初始值是它們的數(shù)據(jù)類型的零值。
靜態(tài)類型聲明
package main
import "fmt"
func main() {
var x float64
x = 20.0
fmt.Println(x)
fmt.Printf("x is of type %T ", x)
}
編譯運行結(jié)果是:
20
x is of type float64
動態(tài)類型聲明/類型推斷
示例
試試下面的例子,其中的變量已經(jīng)聲明沒有任何類型的,并已確定在主函數(shù)中初始化。如果類型推斷的,我們已經(jīng)初始化的變量y使用:=運算符,x初始化使用=運算符。
package main
import "fmt"
func main() {
var x float64 = 20.0
y := 42
fmt.Println(x)
fmt.Println(y)
fmt.Printf("x is of type %T ", x)
fmt.Printf("y is of type %T ", y)
}
編譯和運行上面的程序,這將產(chǎn)生以下結(jié)果:
20
42
x is of type float64
y is of type int
混合變量聲明
不同類型的變量可以一步到位使用類型推斷聲明。
package main
import "fmt"
func main() {
var a, b, c = 3, 4, "foo"
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Printf("a is of type %T ", a)
fmt.Printf("b is of type %T ", b)
fmt.Printf("c is of type %T ", c)
}
編譯和運行上面的程序,這將產(chǎn)生以下結(jié)果:
3
4
foo
a is of type int
b is of type int
c is of type string