[golang] 变量声明和初始化 var, :=, new() 和 make()
[golang] 变量声明和初始化 var, :=, new() 和 make()
说明
go语言中,提供了多种变量声明和初始化的方法。这里着重一一说明。并提供一个简单的指南。
指南
使用make(),来初始化slice,map 和channel 。 大多数场合,类型明确的场合下,使用短变量声明方式:=。 当使用文字方式初始化一个变量,并且需要指明类型时,使用var变量声明方式。 避免使用new(),除非你需要一个指针变量。变量声明方式
go语言可以使用 var 来声明一个变量,并指明变量的数据类型。
// 初始化整数变量,值为10。var v int = 10fmt.Println(v)// 输出: 10// 变量声明: 一个slice变量var vSlice []int = []int{1, 2, 3, 4}fmt.Println(vSlice, "type: ", reflect.TypeOf(vSlice).Kind())// 输出: [1 2 3 4] type: slice// 短变量声明: 一个map变量,指向的值为[]var vMap map[string]int = map[string]int{"a": 1,"b": 2,}fmt.Println(vMap)// 输出: map[a:1 b:2]
短变量声明方式
short variable declarations 符号: :=。
短变量声明时,变量的默认类型是: bool, rune, int, float64, complex128 or string
// 短变量声明: 一个整数变量。sdvInt := 10fmt.Println(sdvInt, "type: ", reflect.TypeOf(sdvInt).Kind())// 输出: 10 type: int// 短变量声明: 一个slice变量sdvSlice := []int{1, 2, 3, 4}fmt.Println(sdvSlice, "type: ", reflect.TypeOf(sdvSlice).Kind())// 输出: [1 2 3 4] type: slice// 短变量声明: 一个map变量,指向的值为[]sdvMap := map[string]int{"a": 1,"b": 2,}fmt.Println(sdvMap)// 输出: map[a:1 b:2]
new(T)
new(T)的特点:
根据类型T分配内存 设置内存为0 返回内存的指针// 初始化一个整数指针变量,指向的值为0var i3 *int = new(int)fmt.Println(*i3)// 初始化一个slice指针变量var i4 = new([10]int)[0:5]fmt.Println(i4, "type: ", reflect.TypeOf(i4).Kind())// 输出: [0 0 0 0 0] type: slice// 初始化一个map指针变量,指向的值为[]var i5 *map[string]int = new(map[string]int)fmt.Println(*i5)// 输出: map[]// 初始化一个chan指针变量,指向的值为nilvar i6 *chan int = new(chan int)fmt.Println(*i6)// 输出: nil
make()
make只用于初始化 slice,map 和 channel。
// make只能用于创建slice, map, channel// 切片类型(slice)makeSlice := make([]int, 5, 10)fmt.Println(makeSlice)// 输出: [0 0 0 0 0]// Map 类型var makeMap map[string]int = make(map[string]int)fmt.Println(makeMap)// 输出: map[]// Channel 类型var makeChan chan int32 = make(chan int32, 100)fmt.Println(makeChan)// 输出: 0xc000112000
完整源码
package main import ("fmt""reflect" ) func main() {// 初始化整数变量,值为10。var v int = 10fmt.Println(v)// 输出: 10// 变量声明: 一个slice变量var vSlice []int = []int{1, 2, 3, 4}fmt.Println(vSlice, "type: ", reflect.TypeOf(vSlice).Kind())// 输出: [1 2 3 4] type: slice// 短变量声明: 一个map变量,指向的值为[]var vMap map[string]int = map[string]int{"a": 1,"b": 2,}fmt.Println(vMap)// 输出: map[a:1 b:2]// 短变量声明: 一个整数变量。sdvInt := 10fmt.Println(sdvInt, "type: ", reflect.TypeOf(sdvInt).Kind())// 输出: 10 type: int// 短变量声明: 一个slice变量sdvSlice := []int{1, 2, 3, 4}fmt.Println(sdvSlice, "type: ", reflect.TypeOf(sdvSlice).Kind())// 输出: [1 2 3 4] type: slice// 短变量声明: 一个map变量,指向的值为[]sdvMap := map[string]int{"a": 1,"b": 2,}fmt.Println(sdvMap)// 输出: map[a:1 b:2]// 初始化一个整数指针变量,指向的值为0var newInt *int = new(int)fmt.Println(*newInt)// 初始化一个slice指针变量var newSlice = new([10]int)[0:5]fmt.Println(newSlice, "type: ", reflect.TypeOf(newSlice).Kind())// 输出: [0 0 0 0 0] type: slice// 初始化一个map指针变量,指向的值为[]var newMap *map[string]int = new(map[string]int)fmt.Println(*newMap)// 输出: map[]// 初始化一个chan指针变量,指向的值为nilvar newChan *chan int = new(chan int)fmt.Println(*newChan)// 输出: nil// make只能用于创建slice, map, channel// 切片类型(slice)makeSlice := make([]int, 5, 10)fmt.Println(makeSlice)// 输出: [0 0 0 0 0]// Map 类型var makeMap map[string]int = make(map[string]int)fmt.Println(makeMap)// 输出: map[]// Channel 类型var makeChan chan int32 = make(chan int32, 100)fmt.Println(makeChan)// 输出: 0xc000112000 }
网址:[golang] 变量声明和初始化 var, :=, new() 和 make() https://mxgxt.com/news/view/365671
相关内容
[golang] 变量声明和初始化 var, :=, new() 和 make()JavaScript数据可视化库
MAKE UP FOR EVER以“蜕变之夜”彩妆大秀明星图集
JavaScript初级玩法(1)—控制台输出三角形
Lisa与Rosalia合作曲《NEW WOMAN》预告公开,女性力量的音乐新篇章!
New Jeans
new balance的明星代言人有哪些?为什么 new balance邀请莱昂纳德做代言人
大热韩流与欧美大神跨国合作,音乐全球化的时代开始了?
papi酱变Angelababy陈赫同门师妹 明星化是网红流量变现终极出路吗?
Aff公开豪宅,男星Film获硕士学位,明星情侣Now和New撒狗粮
随便看看
- 陈梦在飞机上看黄晓明的剧 兄妹互动好有爱
- 2022年,河南高考601分少女高调庆祝,遭嫉妒被杀,凶手竟是亲人
- 同是蒙古族分隔百年,内蒙古如何看待蒙古国,是亲戚还是外国人?
- 为什么亲家不能走得太近,如何看待和亲家的关系?
- 鲸娱文化:同音孙俪与孙莉,同样夫妻二人都是演员,他们是如何带娃的?他们家庭的相处模式有何不同? 首先是孙俪邓超夫妇,他们二人采取的是轮流带娃的方式,并没有说一方为了孩子就牺牲事业,在家专职。有时孙俪会带着孩子们一起写书法,或是邓超带着儿子喝酒,带女儿踏沙。 因为儿子女儿年龄相差不太大,所以孙俪邓超带起来也比较轻松,整体采用的是虎妈猫爸的方式,毕竟一个家庭中总要有人唱白脸或者唱红脸。 那么黄磊...
