通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

Go语言里的make和new有什么区别

Go语言里的make和new的区别主要在以下几个方面:一、适用类型;二、返回类型;三、用途;四、内存分配;五、参数类型;六、用法;七、返回值;八、错误处理。适用类型是指,make只能用于创建slice、map和channel类型的对象,new用于创建所有类型的对象。

一、适用类型

  • make:make只能用于创建slice、map和channel类型的对象,这三种类型属于引用类型。
  • new:new用于创建所有类型的对象,返回的是指向新分配的零值对象的指针,适用于所有类型。

二、返回类型

  • make:make返回的是一个被初始化后的(非零值)的引用类型对象,而不是指针。
  • new:new返回的是一个指向新分配的零值对象的指针。

三、用途

  • make:make用于创建slice、map和channel类型的对象,并对其进行初始化。
  • new:new用于创建各种类型的对象,返回的对象是该类型的指针,并且该对象的值为该类型的零值。

四、内存分配

  • make:对于slice、map和channel类型,make会进行内存分配,并初始化对象的内部结构,返回一个可用的对象。
  • new:new只是进行零值内存分配,不会初始化对象的内部结构,返回的对象是该类型的指针,并且值为零值。

五、参数类型

  • make:make接收的参数是具体的类型和长度等信息,用于创建特定类型的对象。
  • new:new接收的参数是一个类型,用于创建该类型的零值对象。

六、用法

  • make:常用于创建slice、map和channel,并进行初始化,以便直接使用。
  • new:常用于创建各种类型的对象,并获取指向新对象的指针,通常用于获取对象的地址。

七、返回值

  • make:返回创建的对象,类型为所创建的引用类型。
  • new:返回创建对象的指针,类型为指向所创建对象类型的指针。

八、错误处理

  • make:在运行时对于slice、map和channel类型,如果长度参数为负值,或者其他参数出现不合法情况,会引发运行时错误。
  • new:new不会进行运行时错误处理,只进行零值内存分配。

延伸阅读

Go语言的特点

  1. 简洁易用:Go语言拥有清晰简洁的语法,易于学习和使用。它摒弃了一些冗余的语法元素,使得代码更加简明和易读。
  2. 并发支持:Go语言内置了轻量级的并发机制,即Go协程(goroutine)和通道(channel)。开发者可以轻松地使用这些特性来编写高效的并发代码,实现并发编程和并行计算。
  3. 高性能:Go语言的编译器和运行时环境针对性能做了优化,使得生成的机器码具有很高的执行效率。Go语言还支持垃圾回收(Garbage Collection),减轻了开发者的内存管理负担。
  4. 跨平台:Go语言可以直接编译生成独立的二进制文件,无需依赖外部的运行时库。这使得Go语言程序可以方便地在不同的操作系统上进行部署和运行,如Windows、Linux、macOS等。
  5. 内置工具:Go语言附带了一系列的工具,如格式化工具(gofmt)、文档生成工具(godoc)、测试工具(go test)等。这些工具能够提供代码的一致性、可读性和可维护性。
  6. 强大的标准库:Go语言提供了丰富而强大的标准库,覆盖了网络、文件、数据库、加密等各个领域。开发者可以直接使用这些标准库来实现各种常见的功能,提高开发效率。
  7. 社区活跃:Go语言拥有一个活跃的社区,提供了丰富的开源库和框架,以满足不同需求的开发。Go语言的社区还积极参与讨论和改进,推动了Go语言生态系统的发展。
相关文章