开发者

go中make用法及常见的一些坑

目录
  • make用法和参数用法
  • 使用make常见的一些坑
  • 总结

    make用法和参数用法

    golang分配内存有一个make函数,该函数第一个数类型,第二个参数的分配的空间,第三个

    参数时预留分配空间,前两个参数很好理解,但对第三个参数不是很理解,

    例如a:=make([]int,5,10),len(a)输出结果为5,cap(a) 输出结js果为10 ,对a[4]可以正常赋值,但是对a[5]进行赋值就会发现报错

    package main
     
    import "fmt"
     
    func main(){
    	a := make([]int, 5, 10)
    	fmt.Println("len(a):", len(a))编程客栈
    	fmt.Println("cap(a):", cap(a))
    	fmt.Println(a)
    	b := a[:cap(a)]
    	fmt.Println(b)
    }

    使用make常见的一些坑

    1:slice使用make

    slice在make了之后,设置了slice的大小之后。实际上是在slice里面添加了len个数据,

    如果在使用append来操作的话,相当于在slice后面添加新的元素,

    arr := make([]int, 10)
    	fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr)
     
    	arr = append(arr, 1)
    	fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr)
     
    	arr = androidmake([]int, 10, 20)
    	fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr)

    输出结果

    go中make用法及常见的一些坑

    2:map使用map:

    注意:map在使用mRwagczZHlake的时候,就算指定了len,也是不起作用的,这个len起不到限制的作用。如:

    temp := make(map[string]int)
    	fmt.Println("len(temp):", len(temp), "temp:", temp)
     
    	temp1 := make(map[string]int, 3)
    	fmt.Println("len(temp1):", len(temp1), "temp1", temp1)

    输出结果

    go中make用法及常见的一些坑

    下面的例子阐述了new和make的区别

    var p *[]int = new([]int)    // 分配切片数据结构; *p == nil; 几乎没有作用
    编程var v []int = make([]int, 100) // 切片v引用一个[100]int的数组
    
    // 没有必要:
    var p *[]int = new([]int)
    *p = make([]int, 100, 100)
    
    // 惯用做法:
    v := make([]int, 100)

    记住,make只应用于映射、切片和信道,并且不会返回指针。如果想获得一个显式的指针,使用new分配空间或者直接获取变量的地址。

    总结

    到此这篇关于go中make用法及常见的一些坑的文章就介绍到这了,更多相关go的make用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜