首页 > 其他分享 >Golang new() make var []int 使用的具体区别

Golang new() make var []int 使用的具体区别

时间:2024-11-03 21:19:41浏览次数:3  
标签:int make Golang var Println fmt append

一、数组和切片的初始化

1 var  []int  格式

func main() {
	var t1 []int
	t1 = append(t1, 1)
	fmt.Println(t1) //正常输出 1

	var t11 []int
	t11[0] = 11 //panic: runtime error: index out of range [0] with length 0
	fmt.Println(t11)

	var t12 [1]int
	t12[0] = 12
	fmt.Println(t12) //正常输出 12

	var t13 [0]int
	t13[0] = 13 //编译报错 Invalid array index '0' (out of bounds for the 0-element array)
	fmt.Println(t33)
}

注意:没有 t12.append()方法

2  make([]int)  格式

func main() {
	t2 := make([]int, 0)
	t2 = append(t2, 2)
	fmt.Println(t2) //正常输出 2

	t21 := make([]int, 0)
	t21[0] = 21   //panic: runtime error: index out of range [0] with length 0
	fmt.Println(t21)

	t22 := make([]int, 1)
	t22[0] = 22
	fmt.Println(t22) //正常输出 22
	
	t22=append(t22, 1)
	fmt.Println(t22) //正常输出 [22 ,1]

	t23 := make([]int, 0, 0)
	t23 = append(t23, 23)
	t23[0] = 1
	fmt.Println(t23) //正常输出 1
	t23[1] = 2       //panic: runtime error: index out of range [1] with length 1
	fmt.Println(t23)
}

    注意: t22.append()方法

3   []int{}  格式

func main(){

    t3 := []int{}
	t3 = append(t3, 3)
	fmt.Println(t3) //正常输出 3

	t31 := []int{}
	t31[0] = 31 //panic: runtime error: index out of range [0] with length 0
	fmt.Println(t31)

	t32 := [1]int{}
	t32[0] = 32
	fmt.Println(t32) //正常输出 32

	t33 := [0]int{}
	t33[0] = 33 //编译报错 Invalid array index '0' (out of bounds for the 0-element array)
	fmt.Println(t33)

}

  注意:没有 t32.append()方法

4 new([]int)

func main(){
    t4 := new([]int)
	(*t4) = append((*t4), 4)
	fmt.Println(*t4) //正常输出 4

	t41 := new([]int) //返回的内存地址
	(*t41)[0] = 41    //panic: runtime error: index out of range [0] with length 0
	fmt.Println(*t41)

	t42 := new([1]int) //返回的内存地址
	(*t42)[0] = 42
	fmt.Println(*t42) //正常输出 42

	t43 := new([0]int) 
	(*t43)[0] = 43     //编译报错  Invalid array index '0' (out of bounds for the 0-element array)
	fmt.Println(*t43)
}

  注意:没有 t42.append()方法

5 场景分析

        从上面的情况可以总结一下几点:

 (1)  var t1 []int ,   t2 := make([]int, 0) ,  t3 := []int{}  ,  t4 := new([]int):

         都有appeng方法,且 t =  appeng(t,1)  可以正常插入数据;

         t[0]=1 都插入数据失败,报 panic: runtime error: index out of range [0] with length

(2)  var t12 [0]int,  t22 := make([]int, 0,0),t32 := [0]int{}, t42 := new([0]int):

        只有make([]int, 0,0) 有append方法,t=append(t,1)可以成功插入数据,

       也是只有且只有make([]int, 0,0) 有t[0]=1, 且在append扩出来的空间内进行t[i]=3的赋值操作,超过会报panic;

(3) var t12 [1]int,  t22 := make([]int, 1),t32 := [1]int{}, t42 := new([1]int):

      只有 t22 := make([]int, 1)有append方法t =  appeng(t,1)可以正常插入数据

      t[0]=1 都插入数据成功

6 总结

        初始化数组为nil,可以append插入数据,不能用下标t[i]=1插入数据;

        初始化数值长度为0,没有append方法,t[0]=1也会在编译时报错;

        初始化数组长度>0,没有append方法,用下标t[i]=1的方法可以正常插入数据;

        初始化一个长度为0容量为nil的切片即make([]int, 0) ,t =  appeng(t,1)可以正常插入数据;

        初始化一个长度为0容量为nil的切片即make([]int, 0,0),t =  appeng(t,1)可以正常插入数据;

        初始化一个长度为1容量为nil的切片即make([]int, 1),t =  appeng(t,1)可以正常插入数据;

7 基本规则

        初始化的数组和切片只有长度>0,且在数组和切片长度范围内可以用下标的方式赋值;

        在数组长度已经确定的情况下即数组长度>=0,数组没有append()方法,需要用下标去插入数据;

        切片可以比较灵活的用append方法去插入数据,但是用下标插入数据要遵循第一条规则。

二、Map的初始化

1  make(map[string]int)

func main(){
	var m1 = make(map[string]int)
	m1["a1"] = 1
	fmt.Println(m1)  //输出 map[a1:1]
}

2  var map [string]int

func main(){
	var m2 map[string]int
	m2["a2"] = 2 //panic: assignment to entry in nil map
	fmt.Println(m2)
}

认准 make(map[string]int)的用法去初始化map即可;

标签:int,make,Golang,var,Println,fmt,append
From: https://blog.csdn.net/Runing_WoNiu/article/details/143418276

相关文章

  • 第六届国际科技创新学术交流大会 暨信息技术与计算机应用学术会议(ITCA 2024) 2024 6
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus会议时间:2024年12月06-08日会议地点:中国-广州三、大会介绍第六届信息技术与计算机应用学术会......
  • 第六届国际科技创新学术交流大会(IAECST 2024) 2024 6th International Academic Excha
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus大会时间:2024年12月6-8日大会地点:中国-广州三、大会介绍在“十四五”规划的宏伟蓝图中,创新被......
  • 第五届大数据经济与信息化管理国际学术会议(BDEIM 2024) 2024 5th International Confe
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus大会时间:2024年12月13日-15日大会地点:厦门三、大会介绍由河南大学主办,河南大学郑州校区学术发......
  • Applied Artificial Intelligence
    @目录一、征稿简介二、重要信息三、服务简述四、投稿须知一、征稿简介二、重要信息期刊官网:https://ais.cn/u/3eEJNv三、服务简述四、投稿须知1.在线投稿:由艾思科蓝支持在线投稿,请将文章全文投稿至艾思科蓝投稿系统;2.文章应具有学术或实用价值,并未在国内外期刊或会议上......
  • 第四届检测技术与智能系统国际学术会议(DTIS 2024) The 4th International Conference
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus大会时间:2024年12月13-15日大会地点:中国-长沙三、大会介绍第四届检测技术与智能系统国际学术......
  • 159.740 Intelligent Systems
    159.740IntelligentSystemsAssignment#2N.H.ReyesLetterRecognitionusingDeepNeuralNetswithSoftmaxUnitsDeadline:4thofNovemberInstructions:Youareallowedtoworkinagroupof2membersforthisassignment.Yourtaskistowriteaprogramt......
  • COMP2404 Introduction to Software Engineering
    COMP2404-“IntroductiontoSoftwareEngineering”Assignment31SubmissionInstructionsSubmittoBrightspaceonorbeforetheduedateacompressedfile(.taror.zip)thatincludesHeaderandsourcefilesforallclassesinstructedbelow.AworkingM......
  • 使用cmake构建一个动态库的例子
    接触cmake很多年了,但是从来没自己写一个完整的CMakeLists.txt构建过自己的动态库,因为工作以来动态库我都是用别人开源的,基本没有构建自己动态库的需求。今天需要将一个使用automake构建的老库替换为cmake来构建于是了解了一些相关细节,准备迁移过来。极简例子以C语言为例,一个动态......