Go 語言的每個變量都擁有本身的類型,必須通過聲明才能開始用。數據結構
標準格式:函數
var 變量名 變量類型
變量的聲明以關鍵字 var 開頭,行尾不須要寫分號ui
常見變量的數據類型有:整型、浮點型、布爾型、結構體等。spa
例如:指針
var a int var b string var c []float32 var d func() bool var e struct{ x int }
代碼說明:code
優雅格式聲明(推薦):blog
var ( a int b string c []float32 d func() bool e struct { x int } )
使用關鍵字var和括號,能夠將一組變量定義放在一塊兒。 內存
變量的聲明能夠包含初始值,每個變量對應一個值。字符串
若是初始化值已存在,則能夠省略類型;變量會從初始值中得到類型。編譯器
變量初始化的標準格式:
var 變量名 類型 = 表達式
簡化形式:
var 變量名 = 表達式
例如:
var x int = 100
能夠寫成:
var x = 100
默認值:
沒有明確初始值的變量聲明會被賦予它們一個默認值:
整型和浮點型變量的默認值爲 0。
字符串變量的默認值爲空字符串。
布爾型變量默認爲 bool。
切片、函數、指針變量的默認爲 nil。
在函數中,簡潔賦值語句 := 可在類型明確的地方代替 var 聲明。
注意:函數外的每一個語句都必須以關鍵字開始(var
等),所以 :=
結構不能在函數外使用。
例如:
x := 100
編譯器會自動根據右值類型推斷出左值的對應類型。
注意:因爲使用了 :=
,而不是賦值的 =
,所以推導聲明寫法的左值變量必須是沒有定義過的變量。若定義過,將會發生編譯錯誤。
注意:在多個短變量聲明和賦值中,至少有一個新聲明的變量出如今左值中,即使其餘變量名多是重複聲明的,編譯器也不會報錯,例如:
x, z := a, b y, z := a, b
使用Go的「多重賦值特性」,能夠輕鬆完成變量交換的任務。
package main import "fmt" func main() { var a = 100 var b = 200 a, b = b, a fmt.Println(a, b) }
多重賦值時,變量的左值和右值按從左到右的順序賦值。
在使用多重賦值時,若是不須要在左值中接收變量,可使用匿名變量。
匿名變量用一個下劃線 _ 來表示
,使用匿名變量時,只須要在變量聲明的地方使用下劃線替換便可。例如:
var a int a, _ = 100, 200
注意:匿名變量不佔用命名空間,不會分配內存。匿名變量與匿名變量之間也不會由於屢次聲明而沒法使用。
常量是恆定不變的值,例如圓周率。
常量的聲明與變量相似,只不過是使用 const 關鍵字。
常量能夠是字符、字符串、布爾值和數值。
常量不能用 := 語法聲明。
常量的聲明, 例如:
const pi = 3.1415926
注意:常量在聲明的時候必須賦值。
多個變量能夠一塊兒聲明,相似的,多個變量也能夠一塊兒聲明。例如:
const ( pi = 3.1415926 e = 2.718281 )
Go語言中有豐富的數據類型,除了基本的整型、浮點型、布爾型、字符串外,還有切片、結構體、函數、map、通道(channel)等。
Go 語言的基本類型和其餘語言大同小異。
整型能夠分紅如下兩個大類:
按長度分爲:int八、int1六、int3二、int64
對應的無符號整型:uint八、uint1六、uint3二、uint64
其中,uint8 就是咱們熟知的 byte 型.
Go語言支持兩種浮點型數:
float3二、float64.
注意:沒有float
Go語言的浮點型默認聲明爲float64.
布爾型數據只有 true(真)和 false(假)兩個值。
注意:
在Go語言中, true和false均爲小寫 不容許將整型強制轉換爲布爾型
字符串的兩種表示形式:
1. 雙引號,會識別轉義字符
2. 反引號,不會識別轉義字符。以字符串的原生形式輸出,包括換行和特殊字符。
轉義符 | 含義 |
\r | 回車符(返回行首) |
\n | 換行符 |
\t | 製表符 |
\' | 單引號 |
\" | 雙引號 |
\\ | 反斜槓 |
const str = ` 第一行 第二行 第三行 \r\n ` fmt.Println(str)
代碼運行結果:
第一行 第二行 第三行 \r\n
字符串中的每個元素叫作「字符」,在遍歷或者單個獲取字符串元素時能夠得到字符。
Go語言的字符有如下兩種:
Go語言使用類型前置加括號的方式進行類型轉換,通常格式以下:
T(表達式)
其中,T 表明要轉換的類型。表達式包括變量、複雜算子和函數返回值等。
注意:在類型轉換時,須要考慮兩種類型的關係和範圍,是否會發生數值截斷等。
package main import "fmt" func main(){ var n1 int = 20 var n2 float64 = float64(n1) n2 = n2 + 3.6 var n3 int32 = int32(n2) // 當將一個float類型轉成 int時,是直接去掉小數點後的部分 fmt.Printf("n1 type=%T, val=%v; n2 type=%T, val=%v; n3 type=%T, val=%v\n", n1, n1, n2, n2, n3, n3) }
代碼運行結果:
n1 type=int, val=20; n2 type=float64, val=23.6; n3 type=int32, val=23