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

 更新时间:2022年12月26日 10:15:32   作者:little Chen1  
golang分配内存主要有内置函数new和make,下面这篇文章主要给大家介绍了关于go中make用法及常见的一些坑,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

make用法和参数用法

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

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

例如a:=make([]int,5,10),len(a)输出结果为5,cap(a) 输出结果为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 = make([]int, 10, 20)
	fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr)

输出结果

2:map使用map:

注意:map在使用make的时候,就算指定了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)

输出结果

下面的例子阐述了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用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Gin与Mysql实现简单Restful风格API实战示例详解

    Gin与Mysql实现简单Restful风格API实战示例详解

    这篇文章主要为大家介绍了Gin与Mysql实现简单Restful风格API示例详解,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步
    2021-11-11
  • GOLANG使用Context管理关联goroutine的方法

    GOLANG使用Context管理关联goroutine的方法

    这篇文章主要介绍了GOLANG使用Context管理关联goroutine的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 详解Go module的介绍及使用

    详解Go module的介绍及使用

    module是一个相关Go包的集合,它是源代码更替和版本控制的单元。这篇文章主要介绍了Go module的介绍及使用,需要的朋友可以参考下
    2020-10-10
  • Go语言拼接URL路径的三种方法

    Go语言拼接URL路径的三种方法

    本文主要介绍了Go语言拼接URL路径的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Go语言中new()和 make()的区别详解

    Go语言中new()和 make()的区别详解

    这篇文章主要介绍了Go语言中new()和 make()的区别详解,本文讲解了new 的主要特性、make 的主要特性,并对它们的区别做了总结,需要的朋友可以参考下
    2014-10-10
  • golang RWMutex读写锁实现读共享写独占的功能示例

    golang RWMutex读写锁实现读共享写独占的功能示例

    在 Go 里除了互斥锁外,还有读写锁 RWMutex,它主要用来实现读共享,写独占的功能,今天我们也顺便分析下读写锁,加深对 Go 锁的理解
    2023-09-09
  • golang如何修改json文件内容的方法示例

    golang如何修改json文件内容的方法示例

    这篇文章主要介绍了golang如何修改json文件内容的方法示例,使用一个例子说明golang如何访问和修改json文件,有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • Golang中结构体映射mapstructure库深入详解

    Golang中结构体映射mapstructure库深入详解

    mapstructure用于将通用的map[string]interface{}解码到对应的 Go 结构体中,或者执行相反的操作。很多时候,解析来自多种源头的数据流时,我们一般事先并不知道他们对应的具体类型。只有读取到一些字段之后才能做出判断
    2023-01-01
  • Go语言高效编程的3个技巧总结

    Go语言高效编程的3个技巧总结

    Go语言是一种开源编程语言,可轻松构建简单、可靠且高效的软件,下面这篇文章主要给大家分享介绍了关于Go语言高效编程的3个技巧,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • golang读取yaml配置文件的方法实现

    golang读取yaml配置文件的方法实现

    本文主要介绍了golang读取yaml配置文件的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10

最新评论