• GO make&new区别


    自:http://www.cnblogs.com/ghj1976/archive/2013/02/12/2910384.html

    1、make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配。

    2、new本质上说跟其它语言中的同名函数功能一样:new(T)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值。用Go的术语说,它返回了一个指针,指向新分配的类型T的零值。有一点非常重要:new返回指针。


    3、make(T, args)与new(T)有着不同的功能,make只能创建slice、map和channel,并且返回一个有初始值(非零)的T类型(引用),而不是*T。

    4、本质来讲,导致这三个内建类型有所不同的原因是:引用在使用前必须被初始化。例如,一个slice,是一个包含指向数据(内部array)的指针、长度和容量的三项描述符;在这些项目被初始化之前,slice为nil。对于slice、map和channel来说,make初始化了内部的数据结构,填充适当的值。make返回初始化后的(非零)值。

    5、故make 是内建类型初始化的方法,例如:s :=make([]int,len,cap)  //这个切片在元素在超过10个时,底层将会发生至少一次的内存移动动作

      1. //创建一个初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间  
      2. b := make([]int, 5, 10) // len(b)=5, cap(b)=10  
      3. //继续切片,注意len和cap的变化  
      4. b = b[:cap(b)] // len(b)=5, cap(b)=5  
      5. b = b[1:]      // len(b)=4, cap(b)=4  
  • 相关阅读:
    redis和memcache的区别
    c语言行编辑程序
    C语言栈的实现
    双向链表
    静态链表的合并
    静态链表的创建
    链表
    将非递减有序排列(L L1)归并为一个新的线性表L2 线性表L2中的元素仍按值非递减
    C语言合并两个集合(L,L1) 将L1中不在L中的元素插入到L线性表中
    oracle--JOB任务
  • 原文地址:https://www.cnblogs.com/sysnap/p/6892921.html
Copyright © 2020-2023  润新知