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

您所在的位置:网站首页 变量的声明与使用 [golang] 变量声明和初始化 var, :=, new() 和 make()

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

2024-07-13 17:39| 来源: 网络整理| 查看: 265

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

go语言中,提供了多种变量声明和初始化的方法。这里着重一一说明。并提供一个简单的指南。

指南 使用make(),来初始化slice,map 和channel 。 大多数场合,类型明确的场合下,使用短变量声明方式:=。 当使用文字方式初始化一个变量,并且需要指明类型时,使用var变量声明方式。 避免使用new(),除非你需要一个指针变量。 变量声明方式

go语言可以使用 var 来声明一个变量,并指明变量的数据类型。

// 初始化整数变量,值为10。 var v int = 10 fmt.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 := 10 fmt.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 返回内存的指针 // 初始化一个整数指针变量,指向的值为0 var 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指针变量,指向的值为nil var 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 = 10 fmt.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 := 10 fmt.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] // 初始化一个整数指针变量,指向的值为0 var 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指针变量,指向的值为nil var 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 }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3