? ? ? ? 最近老是看到一些面試的視頻,對于視頻內部面試所提到的八股文,感覺是知道是什么,但是要說的話,卻又不知道該怎么說(要不咋稱之為八股文呢),所以就想到寫一篇八股文總結的博客,以便進行學習和復習。
? ? ? ??目前的計劃安排是一天完成一道,具體是哪個主題的不一定,盡可能做到一天一道,慢慢豐富起內容。
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
的簡單清零操作更復雜。
????????