1. 程式人生 > 實用技巧 >Go語言_通神路之靈胎篇(3)

Go語言_通神路之靈胎篇(3)

>>> hot3.png

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()
}

結果為:

29963d1efdc0649385e1c92d1a447056b16.jpg

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()
}

結果為:

805489c6550c955dd6b641ed24cfa713948.jpg

所以說大家可以明白,& 這個就是指向後面引數的記憶體地址,而並非值,當使用*來表示的時候就是現實記憶體內容的具體值了!!!

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