類型 | 名稱 | 長度 | 默認值 | 說明 |
---|---|---|---|---|
pointer | 指針(地址) | nil | ||
array | 數組 | 0 | ||
slice | 切片 | nil | 引用類型 | |
map | 字典 | nil | 引用類型 | |
struct | 結構體 |
go 語言裏面對指針作了弱化數組
保存某個變量的地址,須要指針類型 *int 保存int類型的地址函數
聲明(定義),定義只是特殊的聲明,定義一個變量p 類型爲int var p int大數據
package main import "fmt" func main(){ var a int = 10 //每一個變量有2層含義:變量的內存 變量地址 fmt.Printf("a=%d\n",a) //變量的內存 fmt.Printf("&a = %v\n",&a) //變量的地址 //保存地址必需要用指針(地址) var p *int //定義一個變量p,類型爲int類型 p = &a //指針變量指向誰,就把誰的地址賦值給指針變量 fmt.Printf("p=%v,&a=%v,*p=%v\n",p,&a,*p) *p = 1000 fmt.Printf("p=%v,&a=%v,*p=%v\n",p,&a,*p) }
不能操做沒有合法指向的內存指針
import "fmt" func main(){ var p *int //指針變量 p = nil fmt.Println("p=",p) //*p = 1000 invalid memory address or nil pointer dereference //由於p沒有任何指向 var a int p = &a *p = 1000 fmt.Println("a=",a) }
package main import "fmt" func main(){ //a := 10 //整形變量 var p *int //指針變量 // p = &a // *p = 1000 //a = 1000 p = new(int) fmt.Printf("p=%v,*p=%d\n",p,*p) *p = 6000 fmt.Printf("p=%v,*p=%d\n",p,*p) q := new(int) //自動推導 *q =88888 fmt.Println("*q=",*q) }
func swap(a,b int) { a,b = b,a fmt.Printf("swap:a=%d,b=%d\n",a,b) //20 10 } func main(){ a,b := 10,20 //經過一個函數swap 交換a b的內容 swap(a,b) fmt.Printf("main: a=%d,b=%d\n",a,b) //10 20 }
import "fmt" func swap1(p1,p2 *int){ *p1,*p2 = *p2,*p1 } func main() { a,b :=10,20 swap1(&a,&b) fmt.Printf("main: a= %d,b=%d\n",a,b) }
i1 =100 i2 =95code
數組就是指一系列同一類型的數據集合。數組中包含的每一個數據被稱爲數組元素(element),一個數組包含的元素個數被稱爲數組長度視頻
var id [50]int內存
id[0] = 100element
id[1] = 100get
id[2] =99table
package main import "fmt" func main(){ //id1 := 1 //id2 :=2 //id3 :=3 var id [50]int //數組,同一類型的集合 for i :=0 ;i<len(id);i++{ id[i] = i+1 fmt.Printf("id[%d]=%d\n",i,id[i]) } }
package main import ( "fmt" ) func main(){ //定義一個數組 [10]int和 [5]int 是不一樣的類型 //[數字],這個數字表明的是數組的元素個個數 var a [10]int var b [5]int fmt.Printf("len(a)=%d,len(b)=%d\n",len(a),len(b)) //注意點 定義數組,指定的數組的個數必須是常量 non-constant array bound n //n:=10 //var c [n]int //fmt.Printf("len(c)=%d\n",len(c)) // 操做數組元素,從0開始,到len()-1,不對稱元素,這個數字叫下標,下標是能夠使用變量的 a[0]= 1 i :=1 a[i] = 10 //賦值,每一個元素 for i :=0;i<len(a);i++{ a[i]=i+1 } //打印,第一個返回下標 ,第二個是返回元素對應的值 for i,data :=range a{ fmt.Printf("a[%d]=%d\n",i,data) } }
package main import ( "fmt" ) func main() { //聲明定義同時初始化 var a [5]int = [5]int{1,2,3,4,5} fmt.Println("a=",a) b := [5]int{1,2,3,4,5} //自動推導 fmt.Println("b=",b) //部分初始化 沒有初始化的int自動補全0 c :=[5]int{1,2,3} fmt.Println("c=",c) //指定某個元素的初始化 d := [5]int{2:10,4:20} fmt.Println("d=",d) }
go語言班級 50 c語言班級 40 大數據班級 30
[][] 有多少個【】 表明有多少維
有多少個【】就用多個循環
var a[3][4]int
package main import "fmt" func main(){ //有多少個【】 表明有多少維 //有多少個【】就用多個循環 var a [3][4]int //有三個班級 每一個班級有4人 1 ,2,3,4 5,6,7,8 9,10,11,12 k:=0 for i:=0;i<3;i++{ for j:=0;j<4;j++{ k++ a[i][j] = k fmt.Printf("a[%d][%d]=%d,",i,j,a[i][j]) } fmt.Println() } fmt.Println("a=",a) //有3個元素 每一個元素又是一維數組[4]int b := [3][4]int{{1,2,3,4},{5,6,7,8},{9,10,11,12}} fmt.Println("b=",b) //部分初始化,沒有初始化的若是是int 補全0 c := [3][4]int{{1,2,3},{2,6},{4}} fmt.Println("c=",c) d :=[3][4]int{{1,2,3,4}} fmt.Println("d=",d) e := [3][4]int{1:{5,6,7,8}} fmt.Println("e=",e) }
package main import "fmt" func main() { //只支持 == != 比較是否是每一個元素都同樣 2個數組比較類型要一致 [3]int [4]int a := [5]int{1,2,3,4,5} b := [5]int{1,2,3,4,5} c:=[5]int{1,2,3} fmt.Println("a==b",a==b) fmt.Println("a==c",a==c) //同類型的數組能夠賦值 var d [5]int d = c fmt.Println("d=",d) }
驗證碼 4 6 數 隨機的
package main import ( "math/rand" "fmt" "time" ) func main() { //若是種子參數一致,每次運行的程序產生的結果是一致的 //每次運行讓種子參數不一致 //rand.Seed(6666) rand.Seed(time.Now().UnixNano())// 以當前系統時間做爲種子參數 for i:=0;i<6;i++{ //fmt.Println("rand=",rand.Int()) //隨機數很大 fmt.Println("rand=",rand.Intn(100)) //限制在100之內的數字 } }
更多免費資料和視頻:http://www.dataxueyuan.com/