AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

揭秘 Go 中的 new() 和 make() 函數(shù)

來源: 責(zé)編: 時間:2023-10-24 09:00:36 380觀看
導(dǎo)讀Go(或 Golang)是一種現(xiàn)代、靜態(tài)類型、編譯型的編程語言,專為構(gòu)建可擴(kuò)展、并發(fā)和高效的軟件而設(shè)計。它提供了各種內(nèi)置的函數(shù)和特性,幫助開發(fā)人員編寫簡潔高效的代碼。其中包括 new() 和 make() 函數(shù),這兩個函數(shù)乍看起來可能

Go(或 Golang)是一種現(xiàn)代、靜態(tài)類型、編譯型的編程語言,專為構(gòu)建可擴(kuò)展、并發(fā)和高效的軟件而設(shè)計。它提供了各種內(nèi)置的函數(shù)和特性,幫助開發(fā)人員編寫簡潔高效的代碼。其中包括 new() 和 make() 函數(shù),這兩個函數(shù)乍看起來可能相似,但在 Go 中用于不同的目的,對于內(nèi)存分配和數(shù)據(jù)初始化至關(guān)重要。xBc28資訊網(wǎng)——每日最新資訊28at.com

在本博客文章中,我們將探討 new() 和 make() 函數(shù)之間的區(qū)別,了解何時以及如何有效地使用它們。xBc28資訊網(wǎng)——每日最新資訊28at.com

xBc28資訊網(wǎng)——每日最新資訊28at.com

new() 和 make() 函數(shù)

new() 和 make() 都是 Go 中的內(nèi)置函數(shù),用于分配內(nèi)存。然而,它們用于不同的數(shù)據(jù)類型和場景:xBc28資訊網(wǎng)——每日最新資訊28at.com

new() 函數(shù):xBc28資訊網(wǎng)——每日最新資訊28at.com

  • new() 用于為值類型(例如整數(shù)、浮點(diǎn)數(shù)、結(jié)構(gòu)體)分配內(nèi)存,并返回指向新分配的零值的指針。
  • 它接受一個參數(shù),即類型,并返回該類型的指針。

make() 函數(shù):xBc28資訊網(wǎng)——每日最新資訊28at.com

  • make() 用于創(chuàng)建和初始化切片、映射和通道,這些都是 Go 中的引用類型。
  • 它根據(jù)類型的不同接受兩個或三個參數(shù),并返回一個已初始化(非零值)的值,可以立即使用。

理解 new() 函數(shù)

new() 函數(shù)的語法非常簡單,如下所示:xBc28資訊網(wǎng)——每日最新資訊28at.com

func new(Type) *Type

這里的 Type 表示我們想要為其分配內(nèi)存的值的類型。讓我們看一個如何使用 new() 的示例。xBc28資訊網(wǎng)——每日最新資訊28at.com

在這個示例中,我們使用 new() 創(chuàng)建了 Person 結(jié)構(gòu)體的一個新實(shí)例,然后使用指針分配值給其字段。xBc28資訊網(wǎng)——每日最新資訊28at.com

package mainimport "fmt"type Person struct {    Name string    Age  int}func main() {    // Using new() to allocate memory for a Person struct    p := new(Person)    fmt.Printf("%T/n", p)    // Accessing struct fields using the pointer    p.Name = "Alice"    p.Age = 30    // Displaying the values    fmt.Println("Name:", p.Name)    fmt.Println("Age:", p.Age)}

這個程序?qū)a(chǎn)生如下所示的輸出。xBc28資訊網(wǎng)——每日最新資訊28at.com

> go run main.go*main.PersonName: AliceAge: 30

理解 make() 函數(shù)

make() 函數(shù)的語法取決于它所用于的類型。xBc28資訊網(wǎng)——每日最新資訊28at.com

(1) 對于切片(Slices)xBc28資訊網(wǎng)——每日最新資訊28at.com

func make([]Type, len, cap) []Type
  • Type:切片將保存的元素類型。
  • len:切片的初始長度。
  • cap:切片的容量,這是可選的,并用于指定底層數(shù)組的容量。如果未提供,它默認(rèn)與長度相同。

使用 make() 創(chuàng)建切片的示例:xBc28資訊網(wǎng)——每日最新資訊28at.com

package mainimport "fmt"func main() {    // Using make() to create a slice of integers    numbers := make([]int, 5, 10)    // Displaying the slice's length, capacity, and values    fmt.Println("Length:", len(numbers))    fmt.Println("Capacity:", cap(numbers))    fmt.Println("Values:", numbers)    // Using make() to create a slice of integers    numbersWithoutOptional := make([]int, 5)    // Displaying the slice's length, capacity, and values    fmt.Println("Length:", len(numbersWithoutOptional))    fmt.Println("Capacity:", cap(numbersWithoutOptional))    fmt.Println("Values:", numbersWithoutOptional)}

此程序?qū)a(chǎn)生如下輸出:xBc28資訊網(wǎng)——每日最新資訊28at.com

> go run main.goLength: 5Capacity: 10Values: [0 0 0 0 0]Length: 5Capacity: 5Values: [0 0 0 0 0]

(2) 對于映射(Maps)xBc28資訊網(wǎng)——每日最新資訊28at.com

func make(map[KeyType]ValueType, initialCapacity int) map[KeyType]ValueType
  • KeyType:映射中鍵的類型。
  • ValueType:與鍵關(guān)聯(lián)的值的類型。
  • initialCapacity:映射的初始容量。這是可選的,但當(dāng)預(yù)先知道元素數(shù)量時,可以用于優(yōu)化性能。

使用 make() 創(chuàng)建映射的示例:xBc28資訊網(wǎng)——每日最新資訊28at.com

package mainimport "fmt"func main() {    // Using make() to create a map of string keys and int values    scores := make(map[string]int)    // Adding values to the map    scores["Alice"] = 95    scores["Bob"] = 87    // Displaying the map    fmt.Println("Scores:", scores)}> go run main.goScores: map[Alice:95 Bob:87]

(3) 對于通道(Channels)xBc28資訊網(wǎng)——每日最新資訊28at.com

func make(chan Type, capacity int) chan Type
  • Type:可以通過通道發(fā)送和接收的值的類型。
  • capacity:通道的緩沖區(qū)大小。如果設(shè)置為0,通道是無緩沖的。

使用 make() 創(chuàng)建通道的示例:xBc28資訊網(wǎng)——每日最新資訊28at.com

package mainimport (    "fmt"    "time")func main() {    // Using make() to create an unbuffered channel of integers    ch := make(chan int)    // Sending data into the channel using a goroutine    go func() {        for i := 1; i <= 5; i++ {            ch <- i            time.Sleep(time.Second) // Simulating some work before sending the next value        }        close(ch)    }()    // Receiving data from the channel    for num := range ch {        fmt.Println("Received:", num)    }}> go run main.goReceived: 1Received: 2Received: 3Received: 4Received: 5

結(jié)論

在本博客文章中,我們解開了 Go 中的 new() 和 make() 函數(shù)的謎團(tuán),并解釋了它們的區(qū)別和用途。總結(jié)一下:xBc28資訊網(wǎng)——每日最新資訊28at.com

  • 使用 new() 為值類型分配內(nèi)存,并獲取指向零值的指針。
  • 使用 make() 創(chuàng)建和初始化切片、映射和通道(引用類型),并指定它們的類型和初始容量。

理解 new() 和 make() 之間的區(qū)別對于在 Go 中進(jìn)行高效的內(nèi)存分配和數(shù)據(jù)初始化至關(guān)重要。正確使用這些函數(shù)將在您的 Golang 項(xiàng)目中產(chǎn)生更干凈和更優(yōu)化的代碼。愿您編程愉快!xBc28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-14721-0.html揭秘 Go 中的 new() 和 make() 函數(shù)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 一次搞定:借助Hutool封裝代碼快速解決webservice調(diào)用煩惱

下一篇: Java21新特性——虛擬線程

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 官方承諾:K60至尊版將會首批升級MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版將會搭載天璣9200+處理器和獨(dú)顯芯片X7的同時,Redmi給出了官方承諾,K60至尊重大更新首批升級,會首批推送MIUI 15。也就是說雖然
  • 6月安卓手機(jī)性價比榜:Note 12 Turbo斷層式碾壓

    6月份有一個618,雖然這是京東周年慶的日子,但別的電商也都不約而同的跟進(jìn)了,反正促銷沒壞處,廠商和用戶都能滿意。618期間一些產(chǎn)品也出現(xiàn)了歷史低價,那么各個價位段的產(chǎn)品性價比
  • 6月安卓手機(jī)性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領(lǐng)先
  • 0糖0卡0脂 旭日森林仙草烏龍茶優(yōu)惠:15瓶到手29元

    旭日森林無糖仙草烏龍茶510ml*15瓶平時要賣為79.9元,今日下單領(lǐng)取50元優(yōu)惠券,到手價為29.9元。產(chǎn)品規(guī)格:0糖0卡0脂,添加草本仙草汁,清涼爽口,富含茶多酚,保留
  • 一個注解實(shí)現(xiàn)接口冪等,這樣才優(yōu)雅!

    場景碼猿慢病云管理系統(tǒng)中其實(shí)高并發(fā)的場景不是很多,沒有必要每個接口都去考慮并發(fā)高的場景,比如添加住院患者的這個接口,具體的業(yè)務(wù)代碼就不貼了,業(yè)務(wù)偽代碼如下:圖片上述代碼有
  • 騰訊蓋樓,字節(jié)拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之&ldquo;想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗(yàn)嗎?一起上晶核,即刻暴打!&rdquo;曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應(yīng)該選擇什么樣的著裝?&rdquo;近日,在網(wǎng)絡(luò)上,一個與著裝相關(guān)的帖子引發(fā)關(guān)注,在該帖子里,一位在高級寫字樓亞洲金
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創(chuàng) 作者|程心 羅輯2023年之前,對于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新業(yè)務(wù)到 2022 年底還是 0,希望 2023 年出來一個 1。&rdquo;這是2022年底,李彥宏
  • OPPO K11搭載高性能石墨散熱系統(tǒng):旗艦同款 性能涼爽釋放

    日前OPPO官方宣布,將于7月25日14:30舉辦新品發(fā)布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣點(diǎn)就是將配備索尼
Top