Golang 復合型別

2022-05-07 18:00:11 字數 4681 閱讀 8602

目錄指標的使用

//package 宣告開頭表示**所屬包

package main

import "fmt"

func main()

//a變數的位址是: c042052080

//*p變數的值: 20

通過指標修改變數

//package 宣告開頭表示**所屬包

package main

import "fmt"

func main()

//0xc042052080

//20

go空指標

//package 宣告開頭表示**所屬包

package main

import "fmt"

func main()

}//ptr的值為: //是空

值傳遞和引用傳遞

void pass_by_val(int a)

void pass_by_ref(int& a)

int main()

答案:3,4

值傳遞:

//package 宣告開頭表示**所屬包

package main

import "fmt"

func swap(a, b int)

func main()

// 3 4

go引用傳遞:

//package 宣告開頭表示**所屬包

package main

import "fmt"

func swap(a, b *int)

func main()

// 4 3

宣告變數:

var 陣列名[陣列長度] 陣列型別
宣告和初始化陣列:

//package 宣告開頭表示**所屬包

package main

import "fmt"

func main()

//可以省略大小

arr3 := [10]int

fmt.println(arr1, arr2, arr3)

//定義二維陣列

var grid [4][5]int

fmt.println(grid)

}//[0 0 0 0 0] [1 2 3] [2 4 6 8 10 0 0 0 0 0]

//[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]

陣列是值型別還是引用型別?

package main

import "fmt"

//傳入陣列,修改元素

func printarr(arr [5]int)

}func main()

//可以省略大小

arr3 := [...]int

fmt.println(arr1, arr2, arr3)

//printarr(arr1)

//報錯

//printarr(arr2)

printarr(arr3)

//列印原始值

fmt.println()

fmt.println(arr3)

}

//package 宣告開頭表示**所屬包

package main

import "fmt"

func main()

//切片取值

fmt.println(arr[2:6])

fmt.println(arr[:6])

fmt.println(arr[2:])

fmt.println(arr[:])

}//[2 3 4 5]

//[0 1 2 3 4 5]

//[2 3 4 5 6 7]

//[0 1 2 3 4 5 6 7]

go切片可以向後擴充套件, 但不能向前擴充套件

//package 宣告開頭表示**所屬包

package main

import "fmt"

func main()

s1 := arr[2:6]

fmt.println(s1)

s2 := s1[3:5]

fmt.println(s2)

//切片新增元素

fmt.println(s3)

fmt.println(arr)

fmt.println(s4)

fmt.println(arr)

fmt.println(s5)

fmt.println(arr)

}//[2 3 4 5]

//[5 6]

//[5 6 10]

//[0 1 2 3 4 5 6 10]

//[5 6 10 11]

//[0 1 2 3 4 5 6 10]

//[5 6 10 11 12]

//[0 1 2 3 4 5 6 10]

內建函式copy()

//package 宣告開頭表示**所屬包

package main

import "fmt"

func main()

s1 := data[8:]

s2 := data[:5]

fmt.println(s1)

fmt.println(s2)

//將第二個拷貝到第乙個裡

copy(s2, s1)

fmt.println(s2)

fmt.println(data)

}//[8 9]

//[0 1 2 3 4]

//[8 9 2 3 4]

//[8 9 2 3 4 5 6 7 8 9]

初始化map

//package 宣告開頭表示**所屬包

package main

import "fmt"

func main()

fmt.println(m1)

//2. 自動推導型別 :=

m2 :=map[int]string

fmt.println(m2)

}//map[1:超哥 2:最帥]

//map[1:超哥 2:最帥]

鍵值操作

//package 宣告開頭表示**所屬包

package main

func main()

//修改

m1[1]="1111"

//追加

m1[3]="333"

}

結構體初始化

//package 宣告開頭表示**所屬包

package main

import "fmt"

//定義學生結構體

type student struct

func main()

fmt.println(s1)

s2 := student

fmt.println(s2)

//s3 := student

//2.指定初始化成員

s4 := student

fmt.println(s4)

fmt.println(s4.id)

//3.結構體作為指標變數初始化

var s5 *student = &student

fmt.println(s5)

//指標型別訪問變數

//go底層自己實現了轉換,下面2種都可以取指標物件的屬性

fmt.println((*s5).id)

fmt.println(s5.id)

s6 := &student

fmt.println(s6)}//

////

//4//&

//5//5

//&

結構體可以作為函式引數傳遞

//package 宣告開頭表示**所屬包

package main

import "fmt"

type student struct

//定義傳遞學生物件的方法

func tmpstudent(tmp student)

//定義傳遞指標型別的物件的方法

func tmpstudent2(p *student)

func main()

tmpstudent(s)

fmt.println("main s =", s)

//傳遞指標位址

tmpstudent2(&s)

fmt.println("main s2=", s)

}//tmp=

//main s =

//tmp2= &

//main s2=

Golang復合型別 切片

go 語言切片是對陣列的抽象。go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大 切片是一種方便 靈活且強大的包裝器。切片本身沒有任何資料。它們只是對現有陣列的...

golang復合資料型別 陣列

顧名思義,復合資料型別就是由其他型別組合而成的型別。go語言基本的復合資料型別有 指標 陣列 切片 字典 map 通道 結構和介面 go語言提供了陣列型別的資料結構。陣列是具有相同唯一型別的一組編號且長度固定的資料項序列,這種型別可以是任意的原始型別,例如 整形 字串或者自定義型別。陣列元素可以通過...

python復合型別 python復合型別

鏈結 list python的列表的特點 可以隨時新增和刪除元素 可以做的操作有 切片,新增,刪除,查詢,修改,排序 列表元素可以是不同型別,在型別不同的情況下就無法排序 列表是有序的 定義小馬列表 li twilight pinkiepie rainbow dash 插入 insert self ...