欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析Golang中make和new的用法區(qū)別

 更新時間:2024年02月03日 08:10:27   作者:夢_魚  
在Go語言中,有兩個比較雷同的內置函數,分別是new和make方法,二者都可以用來分配內存,那他們有什么區(qū)別呢?下面就跟隨小編一起來學習一下吧

相同點

都是內建函數,都是在堆上分配內存,都需要傳遞類型參數

不同點

1.傳遞的參數不一樣

new函數只接收一個參數,make函數可以接收一個以上的參數

package main

import "fmt"

func main() {
	// int類型0值的指針,返回的值是以0x開頭的16進制整數,參數個數為1
	intZeroValuePoint := new(int)
	fmt.Printf("%v\n", intZeroValuePoint)

	// 為slice分配內存, 創(chuàng)建初始值問 [0 0 0 0 0] 的切片,參數個數為3,第三個參數是可選的
	intHasInitLenSlice := make([]int, 5, 10)
	fmt.Printf("%v\n", intHasInitLenSlice)
}

2.返回的參數類型不一樣

new函數返回對應輸入參數類型的指針類型,make函數返回輸入參數類型

package main

import "fmt"

func main() {
	// int類型0值的指針,返回的值是以0x開頭的16進制整數
	intZeroValuePoint := new(int)
	fmt.Printf("%T\n", intZeroValuePoint)		// 輸出 *int

	// 為slice分配內存, 創(chuàng)建初始值問 [0 0 0 0 0] 的切片
	intHasInitLenSlice := make([]int, 5, 10)
	fmt.Printf("%T\n", intHasInitLenSlice)		// 輸出 []int
}

3.使用場景不一樣

new函數為類型分配類型對應零值內存并返回指針,make是為特定引用類型slice map chan 分配內存

package main

import "fmt"

func main() {
	// int類型0值的指針,返回的值是以0x開頭的16進制整數
	intZeroValuePoint := new(int)
	fmt.Printf("%T\n", intZeroValuePoint) // 輸出 *int

	// 為slice零值分配內存,返回的值是以0x開頭的16進制整數
	sliceZeroValuePoint := new([]int)
	fmt.Printf("%T: %v\n", sliceZeroValuePoint, sliceZeroValuePoint) // 輸出 *[]int &[]

	// 為slice分配內存, 創(chuàng)建初始值問 [0 0 0 0 0] 的切片
	intHasInitLenSlice := make([]int, 5, 10)
	fmt.Printf("%T\n", intHasInitLenSlice) // 輸出 []int

	// 為map分配內存
	mapValue := make(map[string]string, 10)
	fmt.Printf("%T\n", mapValue) // 輸出 map[string]string

	// 為chan類型分配內存
	chanValue := make(chan int, 10)
	fmt.Printf("%T\n", chanValue)
}

總結

下面小編為大家總結了一下new和make函數的異同點,希望對大家有所幫助

相同點

  • 都是內建函數,用于內存管理。
  • 都涉及到動態(tài)內存的分配。

不同點

用途和適用類型:

  • new(T):適用于任何類型的內存分配,包括但不限于結構體、數組、指針等。它會為指定的類型 T 分配內存,并將內存初始化為其零值,然后返回指向該內存區(qū)域的指針(類型為 *T)。
  • make(T, args…):僅適用于三個內建的引用類型,即切片(slice)、映射(map)和通道(channel)。對于這三種類型,make 不僅僅是分配內存,還會執(zhí)行額外的初始化操作,如設置內部數據結構、哈希表大小以及 channel 緩沖區(qū)等。make 函數的返回值直接是初始化后的 slice/map/channel 類型,而不是指針。

使用方式和返回值:

  • new() 的調用形式相對簡單:p := new(Type),返回的是一個指向新分配內存的指針。
  • make() 的調用需要提供額外參數以初始化相應的類型,例如創(chuàng)建切片時需要長度和可選的容量:s := make([]int, length, capacity);創(chuàng)建 map 或 channel 時無需指定大小,但可以對通道指定緩沖區(qū)大小。

初始化內容:

new() 只做最基本的內存分配并填充零值。

make() 初始化的內容更復雜,例如:

  • 對于切片,會創(chuàng)建底層數組并設置長度和容量;
  • 對于映射,會初始化一個空的哈希表;
  • 對于通道,會創(chuàng)建一個通信的數據結構,并可選擇性地分配緩沖區(qū)。

到此這篇關于淺析Golang中make和new的用法區(qū)別的文章就介紹到這了,更多相關Go make new區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談golang的json.Unmarshal的坑

    淺談golang的json.Unmarshal的坑

    本文主要介紹了淺談golang的json.Unmarshal的坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • golang中defer的關鍵特性示例詳解

    golang中defer的關鍵特性示例詳解

    defer是golang語言中的關鍵字,用于資源的釋放,會在函數返回之前進行調用。下面這篇文章主要給大家介紹了關于golang中defer的關鍵特性,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-08-08
  • GO語言基礎入門第一個go程序解讀

    GO語言基礎入門第一個go程序解讀

    這篇文章主要為大家介紹了GO語言基礎入門的第一個go程序解讀,下面來帶大家進入Go語言世界helloworld的大門吧,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • golang簡單位運算示例

    golang簡單位運算示例

    這篇文章主要介紹了golang簡單位運算,包括位移運算、取反及位與位或等運算,需要的朋友可以參考下
    2016-07-07
  • Golang技巧之重試機制詳解

    Golang技巧之重試機制詳解

    重試機制是一種在程序執(zhí)行過程中出現(xiàn)錯誤后重新嘗試執(zhí)行程序的一種機制,可以減少程序運行過程中出現(xiàn)的錯誤,從而提高程序的可靠性,本文就來講講Golang中是如何實現(xiàn)重試機制的吧
    2023-05-05
  • go內存緩存BigCache實現(xiàn)BytesQueue源碼解讀

    go內存緩存BigCache實現(xiàn)BytesQueue源碼解讀

    這篇文章主要為大家介紹了go內存緩存BigCache實現(xiàn)BytesQueue源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Golang中crypto/cipher加密標準庫全面指南

    Golang中crypto/cipher加密標準庫全面指南

    本文主要介紹了Golang中crypto/cipher加密標準庫,包括對稱加密、非對稱加密以及使用流加密和塊加密算法,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • golang 語言中錯誤處理機制

    golang 語言中錯誤處理機制

    Golang 的錯誤處理方式可能和這些你熟悉的語言有所不同,今天通過本文給大家分享golang 語言中錯誤處理機制,感興趣的朋友一起看看吧
    2021-08-08
  • 詳解golang channel有無緩沖區(qū)的區(qū)別

    詳解golang channel有無緩沖區(qū)的區(qū)別

    這篇文章主要給大家介紹了golang channel有無緩沖區(qū)的區(qū)別,無緩沖是同步的,有緩沖是異步的,文中通過代碼示例給大家講解的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 一文詳解Golang中字符串的常見錯誤

    一文詳解Golang中字符串的常見錯誤

    這篇文章主要來和大家深入討論一下Golang?中的字符串,并查看一些不同的場景,以避免常見錯誤,對大家掌握golang有一定的幫助,需要的可以了解下
    2023-10-10

最新評論