八股(One Day one)
最近老是看到一些面试的视频,对于视频内部面试所提到的八股文,感觉是知道是什么,但是要说的话,却又不知道该怎么说(要不咋称之为八股文呢),所以就想到写一篇八股文总结的博客,以便进行学习和复习。
目前的计划安排是一天完成一道,具体是哪个主题的不一定,尽可能做到一天一道,慢慢丰富起内容。
golang基础
1、golang中new和make的作用,以及他们的区别
自己想的(可以忽略),直接看下面标准答案:
new:new的作用就是传入一个类型,创建一个对象,并返回这个对象的指针。
make:make就是为slice、map、chan、channel初始化空间
区别:没啥区别呀,就不是一个东西😥。(呃呃呃,自己脑子里的就是不靠谱)
标准回答:
new
函数的作用
- 在 Go 语言中,
new
是一个内置函数。它的主要作用是分配内存,并且将这块内存初始化为零值,然后返回指向这块内存的指针。
make
函数的作用
make
也是 Go 语言中的一个内置函数,但它和new
有不同的用途。make
主要用于创建切片(slice
)、映射(map
)和通道(channel
)这三种复合类型,并且返回一个初始化后的(非零值)对象。- 对于切片,
make
会分配一个底层数组,并返回一个切片对象,这个切片对象包含了长度(len
)和容量(cap
)信息。例如,make([]int, 2)
会创建一个长度为2的int
类型切片,其底层数组已经被分配并且元素被初始化为int
类型的零值(也就是0
)。- 对于映射,
make
会创建一个空的映射,这个映射可以用于存储键 - 值对。例如,make(map[string]int)
会创建一个键为string
类型,值为int
类型的空映射。- 对于通道,
make
会创建一个通道,可以用于在不同的goroutine
之间进行通信。例如,make(chan int)
会创建一个int
类型的通道。
new
和make
的区别
- 功能用途不同
new
主要用于分配内存并返回指向该内存的指针,它可以用于任何类型,只要你想得到一个指向该类型零值的指针。而make
主要用于初始化并返回切片、映射和通道这三种复合类型,它返回的是一个已经初始化的非零值对象。- 返回值类型不同
new
返回的是一个指针,类型是*T
(T
是你传入的类型)。例如new(int)
返回*int
。而make
返回的是切片、映射或通道本身,例如make([]int, 5)
返回[]int
类型的切片,make(map[string]int)
返回map[string]int
类型的映射,make(chan int)
返回chan int
类型的通道。- 内存初始化不同
new
只是将分配的内存清零,也就是将值初始化为该类型的零值。而make
对于切片会分配底层数组并初始化元素;对于映射会创建一个空的可以存储键 - 值对的数据结构;对于通道会创建一个可以用于通信的通道对象,这些初始化过程比new
的简单清零操作更复杂。