golang make和new初探

make和new都属于golang的内建函数、二者都起到了定义变量的作用

make为slice map chan三种类型分配和初始化一个对象、也只能为这三种分配,原型如下:

func make(t Type, size ...IntegerType) Type

t代表变量类型、参数列表size根据所定义的变量类型不同而不同、返回值类型与参数类型相同、与new不同的是其返回结果取决于参数类型、而不是返回一个指针

size参数对三种类型具体使用说明如下:

  • size指定slice长度、如果有第二个整形参数、则第二个指定的是其容量、容量不能小于其指定的长度
  • 空的map被分配足够的空间来容纳指定数量的元素、size可以为空、在size为空的情况下、会分配一个比较小的起始大小
  • channel缓存通过指定的缓存容量(size)进行初始化,如果指定size为0或者为空、则会初始化一个非缓冲channel

new为所要定义的变量分配内存,原型如下:

func new(Type) *Type

参数代表变量类型、返回的值是一个指向该类型的新分配的零值的指针

具体输出实例如下:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    mp := make(map[string]string,5)
    fmt.Printf("type:%v\n",reflect.TypeOf(mp))
    // 此处输出map[string]string
    sl := make([]string, 2, 10)
    fmt.Printf("type:%v\n",reflect.TypeOf(sl))
    // 此处输出[]string
    sn := new(int)
    fmt.Printf("ntp : %v\n", reflect.TypeOf(sn))
    // 此处输出*int
}    

 

posted on 2018-02-06 09:30  残天  阅读(166)  评论(0)    收藏  举报

导航