[golang] 变量声明和初始化 var, :=, new() 和 make()

发布时间:2024-12-20 14:45

[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() http://c.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撒狗粮

随便看看