- 指针
- 变量是一种占位符,用于引用计算机内存地址,go语言中取内存地址的符号是&,&放到变量前面即返回变量的内存地址;
- 一个指针变量指向了一个值的内存地址,使用指针前需要声明指针,使用*,var var_name *var-type,如var i *int;
- 当一个指针北定以后没有分配任何变量时,称为空指针,它的值为nil
package main import "fmt" func main(){ var d int = 10 fmt.Printf("变量的地址:%x\n", &d) var ptr *int fmt.Printf("ptr的值为:%x\n",ptr) if(ptr!=nil){ fmt.Printf("ptr不是空指针") } if(ptr==nil){ fmt.Printf("ptr是空指针") } }
2.struct,数组中只能存储同一类型的数据,但结构体中可以为不同项定义不同的数据类型。
package main import "fmt" type Books struct{ title string author string subject string book_id int } func main(){ fmt.Println(Books{"红楼梦","曹雪芹","红楼梦",1234}) fmt.Println(Books{title:"红楼梦",author:"曹雪芹",subject:"红楼梦",book_id:1234}) fmt.Println(Books{title:"红楼梦",author:"曹雪芹",}) }
3.slice,数组的长度是不可改变的,切片是一种动态数组,其长度不是固定的,可以追加元素。
package main import "fmt" func main(){ slice1:=[] int {1,2,3,4,5,6} slice2:=make([] int,3,5) var slice3 []int fmt.Println(slice1[3:]) slice1=append(slice1,7) fmt.Println(slice1[3:]) fmt.Println(slice2) fmt.Println(len(slice2),cap(slice2)) if(slice3 == nil){ fmt.Println("切片是空的") }else{ fmt.Println("切片不是空的") } }
4.Range
package main import "fmt" func main(){ nums:=[] int{1,2,3,4} sum:=0 for _,num :=range nums{ sum+=num } fmt.Println(sum) kvs:=map[string]string{"a":"yes","b":"no"} for k,v:=range kvs{ fmt.Printf("%s -> %s\n",k,v) } }