zoukankan      html  css  js  c++  java
  • [Go] Golang中make和new的区别

    new:

    func new(Type) *Type
    接收一个参数,这个参数是一种类型,而不是一个值,分配好内存后,返回一个指向该类型内存地址的指针,这个指针指向的内容的值为该类型的零值。

    对于不同的数据类型,零值的意义是完全不一样的。
    比如,对于bool类型,零值为false;int的零值为0;string的零值是空字符串

    make:
    func make(t Type, size ...IntegerType) Type
    同样用于内存分配,但和new不同,make用于channel,slice和map的分配,而且返回的类型就是这三个类型本身,而不是它们的指针,因为这三种类型本身就是引用类型,所以就没必要返回他们的指针了。

    具体而言,有如下几种用法:
    (1)make(map[string]string):即缺少长度的参数,只传类型,这种用法只能用在类型为map或chan的场景
    (2)make([]int, 2):指定了长度,例如make([]int, 2)返回的是一个长度为2的slice
    (3)make([]int, 2, 4):既指定了长度len为2,又指定了cap为4
    注意:由于这三种类型都是引用类型,所以必须得初始化,但是并不是置为零值.

  • 相关阅读:
    Spring spEL
    Spring 使用外部部署文件
    Spring 自动装配
    spring 属性配置细节
    hdu 1054 Strategic Game
    fzu 2037 Maximum Value Problem
    将博客搬至CSDN
    HDU 4714 Tree2Cycle
    HDU 1009 The Shortest Path in Nya Graph
    POJ 1942 Paths on a Grid 组合数的优化
  • 原文地址:https://www.cnblogs.com/taoshihan/p/12732911.html
Copyright © 2011-2022 走看看