返回

揭秘 Golang 中的 new 和 make,你不知道的知识点

后端







## new 和 make 的区别

**1. 用法不同** 

* **new** :new 是一个运算符,它后面必须跟一个类型名称。例如:

```go
p := new(int)
  • make :make 是一个函数,它后面可以跟一个类型名称,也可以跟一个类型和一个容量或长度。例如:
slice := make([]int, 10)

2. 分配内存的方式不同

  • new :new 会在堆内存中分配一块内存,并将它的地址赋给指针变量。
  • make :make 会在栈内存中分配一块内存,并将它的地址赋给变量。

3. 创建对象的方式不同

  • new :new 会创建一个指向类型为 T 的零值的指针。
  • make :make 会创建一个类型为 T 的值。

4. 返回值不同

  • new :new 返回一个指向类型为 T 的零值的指针。
  • make :make 返回一个类型为 T 的值。

5. 效率不同

  • new :new 的效率更高,因为它只需要分配一块内存,而不需要初始化它。
  • make :make 的效率较低,因为它需要分配一块内存并初始化它。

何时使用 new 和 make

  • new :如果您需要创建一个指向类型为 T 的零值的指针,那么可以使用 new。例如,如果您需要创建一个指向结构体变量的指针,那么可以使用 new。
  • make :如果您需要创建一个类型为 T 的值,那么可以使用 make。例如,如果您需要创建一个数组、切片、map 或通道,那么可以使用 make。

总结

new 和 make 是 Golang 中非常重要的两个,它们都可以用来分配内存并创建对象。但是,它们之间也有着一些关键的区别。如果您能理解并正确使用它们,那么您将能够更好地编写 Golang 程序。

另外,这里有一些关于 new 和 make 的常见问题和解答:

  • 问:什么时候应该使用 new?

答:当您需要创建一个指向类型为 T 的零值的指针时,应该使用 new。例如,如果您需要创建一个指向结构体变量的指针,那么可以使用 new。

  • 问:什么时候应该使用 make?

答:当您需要创建一个类型为 T 的值时,应该使用 make。例如,如果您需要创建一个数组、切片、map 或通道,那么可以使用 make。

  • 问:new 和 make 的效率有什么区别?

答:new 的效率更高,因为它只需要分配一块内存,而不需要初始化它。make 的效率较低,因为它需要分配一块内存并初始化它。

  • 问:new 和 make 返回的值有什么区别?

答:new 返回一个指向类型为 T 的零值的指针。make 返回一个类型为 T 的值。

希望这些信息对您有所帮助。如果您还有其他问题,请随时提出。