Go語言_通神路之靈胎篇(3)
1、變數
go的變數和java變數差不多,也分區域性作用域和全部作用域
package main import "fmt" var c,python,java bool func main() { var i int fmt.Print(i,c,java,python) }
結果為:0 false false false
2、變數的初始化
變數宣告可以包含初始值,每個變數對應一個。如果初始化值已存在,則可以省略型別;變數會從初始值中獲得型別
package main import "fmt" var i,j int = 2,4 func main() { var success,isah = true,false fmt.Println(i,j,success,isah) }
結果為:2 4 true false
3、短變數宣告
在函式中,簡潔賦值語句 := 可在型別明確的地方代替 var 宣告!!!
函式外的每個語句都必須以關鍵字開始(var func等等),因此 :=結構不能在函式外使用。
package main import "fmt" var i,j int = 2,4 func main() { success,isah := true,false fmt.Println(i,j,success,isah) }
結果為:2 4 true false
4、go資料型別
4.1 整型
go語言有13種整形,其中有2種只是名字不同,實質是一樣的,所以,實質上go語言有11種整型
整型
int | 依賴不同平臺下的實現,可以是int32或int64 |
int8 | [-128---127] [-2^7---2^7-1] |
int16 | [-2^15---2^15-1] |
int32 | [-2^31---2^31-1] |
int64 | [-2^63---2^63-1] |
unit | 依賴不同平臺下的實現,可以是int32或int64 |
unit8(又名byte) | [0---2^8-1] |
unit16 | [0---2^16-1] |
unit32(又名rune) | [0---2^32-1] |
unit64 | [0---2^64-1] |
unitptr | 恰好容納指標值的型別,對32位平臺是unit32,對64位平臺是unit64 |
4.2 浮點型別
go語言有2種類型的浮點和兩種型別的複數型別。
浮點型別
float32 | (-3.402...×1038 -> 3.402...×1038) |
float64 | (-1.797...×10308 -> +1.797...×10308) |
complex64 | 實部、虛部都是一個float32 |
complex128 | 實部、虛部都是一個float64 |
標準庫math包中,包含了眾多數學函式,其中所有函式均使用float64,標準庫math/cmplx包含眾多複數相關的數學函式,其中所有函式均使用complex128)
4.3、字串
Go語言的字串是用UTF-8編碼的變寬字元序列,每個字元都用一個或多個位元組表示
建立:一種是用雙引號(")括起來,它表示可解析的字串,可以進行字元轉義。另一種是用單引號(')括起來,它表示原生的字串,可以包含除反引號之外的任何字元,當然也可以換行
package main import "fmt" func test1() { str1 := "\"it's me!\"" str2 := `"it's me,too"` fmt.Println(str1) fmt.Println(str2) } func main() { test1() }
結果為:
"it's me!"
"it's me,too"
Go語言的字串支援 “+=”操作,可以通過[n]獲取索引處的原始位元組、通過[n:m]、[n:]、[:m]來獲取位元組對應的字串,若字元被截段,顯示亂碼。
package main import "fmt" func test1() { str1 := "\"it's me!\"" str2 := `"it's me,too"` fmt.Println(str1) fmt.Println(str2) } func test2() { str1 := "Go語言是目前最有潛力的語言,由GooGle開發,用於區塊鏈的主流語言" fmt.Println(str1[4:15]) fmt.Println(str1[5:15]) fmt.Println(str1[5]) fmt.Println(str1[:5]) fmt.Println(len(str1)) //位元組數 fmt.Println(len([]rune(str1))) //字元數 } func main() { test2() }
結果為:
5、bool型別
取值範圍為:true , false,長度為 1 個位元組,不可以用數字來表示true 和 false
6、指標
6.1 簡單的指標
package main import "fmt" func test1() { str1 := "\"it's me!\"" str2 := `"it's me,too"` fmt.Println(str1) fmt.Println(str2) } func test2() { str1 := "Go語言是目前最有潛力的語言,由GooGle開發,用於區塊鏈的主流語言" fmt.Println(str1[4:15]) fmt.Println(str1[5:15]) fmt.Println(str1[5]) fmt.Println(str1[:5]) fmt.Println(len(str1)) //位元組數 fmt.Println(len([]rune(str1))) //字元數 } func test3() { a := "abc" b := "xyz" pa := &a //pa為指向a的指標,在java裡面就是指向a的記憶體地址 pp := &pa //pp為指向pa的指標,在java裡面就是指向pa的記憶體地址 fmt.Println(a, b, *pa, **pp) a += "zz" //a追加“mm” fmt.Println(a, b, *pa, **pp) *pa += "bb" //pp指向的值,追加"bb" fmt.Println(a, b, *pa, **pp) fmt.Println("列印a各種情況:", &a, a) fmt.Println("列印pa各種情況:", &pa, pa, *pa) fmt.Println("列印pp各種情況:", &pp, pp, *pp, **pp) } func main() { test3() }
結果為:
所以說大家可以明白,& 這個就是指向後面引數的記憶體地址,而並非值,當使用*來表示的時候就是現實記憶體內容的具體值了!!!
6.2建立變數
有兩種建立變數的語法,同時獲得指向它們的指標:new(Type) 和 &Type{}
在上面新增一個結構體(java中的實體類一樣)和一個函式(java中方法一樣)
type point struct { x int y int }
func test4() { a := point{2, 4} b := new(point) c := &point{} d := &point{3, 5} fmt.Println(a, b, c, d) }
執行結果:
{2 4} &{0 0} &{0 0} &{3 5}
Go語言列印指向結構體的指標時,會列印解引用後的結構體內容,同時會將&作為字首,表示它是一個指標!
7、預設資料型別
1、零值並不等於空值,而是當變數被宣告為某種型別的初始值
2、正常情況下的預設值為0
3、bool預設為false
4、string預設為空字串
8、常量修飾
const mdxl = "ed"
用const 修飾常量,當mdxl時,不能外部呼叫,當變成大寫Mdxl的時候,可以外部呼叫
轉載於:https://my.oschina.net/mdxlcj/blog/1931315