Skip to content

make 和 new 题目 #45

Open
Open
@JasonJe

Description

@JasonJe
  1. 下面两段代码的输出是什么
// 1.
func main() {
    s := make([]int, 5)
    s = append(s, 1, 2, 3)
    fmt.Println(s)
}

// 2.
func main() {
    s := make([]int, 0)
    s = append(s,1,2,3,4)
    fmt.Println(s)
}

输出:

[0 0 0 0 0 1 2 3]
[1 2 3 4]
  1. new()make() 的区别

new(T)make(T, args)Go 语言内建函数,用来分配内存,但适用的类型不同。

new(T) 会为 T 类型的新值分配已置零的内存空间,并返回地址(指针),即类型为 *T 的值。换句话说就是,返回一个指针,该指针指向新分配类型为 T 的零值。适用于值类型,如数组、结构体等。

make(T, args) 返回初始化之后的 T 类型的值,这个值并不是 T 类型的零值,也不是指针 *T,是经过初始化之后的 T 的引用。make() 只适用于 slicemapchannel

  1. 判断下面代码能否通过编译
func main() {
    list := new([]int)
    list = append(list1)
    fmt.Println(list)
}

结果:不能通过编译。

解析:new([]int)返回一个*[]int类型的指针,不能进行append的操作。正确的方式是使用make()或者字面量进行初始化。

Metadata

Metadata

Assignees

No one assigned

    Labels

    GoGolang

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions