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

Go語言中內(nèi)建函數(shù)make的使用

 更新時間:2024年09月26日 11:42:47   作者:音樂學(xué)家方大剛  
在Go語言編程中,make函數(shù)是一個重要的內(nèi)建函數(shù),它用于創(chuàng)建和初始化切片、映射和通道,握 make 的使用方法,可以幫助我們更高效地管理內(nèi)存和數(shù)據(jù)結(jié)構(gòu)

在 Go 語言中,make 是一個非常強大的內(nèi)建函數(shù),用于創(chuàng)建和初始化特定類型的數(shù)據(jù)結(jié)構(gòu),包括切片(slice)、映射(map)和通道(channel)。掌握 make 的使用方法,可以幫助我們更高效地管理內(nèi)存和數(shù)據(jù)結(jié)構(gòu)。本文將詳細(xì)介紹 make 函數(shù)的使用場景和示例。

make 函數(shù)的基本語法

make 函數(shù)的基本語法如下:

make(type, size, [capacity])
  • type:指定要創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)類型,可以是切片、映射或通道。
  • size:指定初始長度(對于切片)或初始大小(對于通道)。
  • capacity(可選):僅適用于切片,指定其容量。

創(chuàng)建切片

使用 make 函數(shù)創(chuàng)建切片時,可以指定切片的初始長度和容量。如果未指定容量,默認(rèn)與長度相同。

package main

import "fmt"

func main() {
    // 創(chuàng)建長度為 5 的切片
    slice1 := make([]int, 5)
    fmt.Println("slice1:", slice1) // 輸出:slice1: [0 0 0 0 0]

    // 創(chuàng)建長度為 5,容量為 10 的切片
    slice2 := make([]int, 5, 10)
    fmt.Println("slice2:", slice2) // 輸出:slice2: [0 0 0 0 0]
    fmt.Println("slice2 容量:", cap(slice2)) // 輸出:slice2 容量: 10
}

創(chuàng)建映射

使用 make 函數(shù)創(chuàng)建映射時,只需要指定映射的類型。映射會自動調(diào)整大小,因此不需要指定初始容量,但可以提供一個初始容量以提高性能。

package main

import "fmt"

func main() {
    // 創(chuàng)建一個映射
    m := make(map[string]int)
    m["a"] = 1
    m["b"] = 2
    fmt.Println("map:", m) // 輸出:map: map[a:1 b:2]

    // 創(chuàng)建一個初始容量為 10 的映射
    m2 := make(map[string]int, 10)
    fmt.Println("map2:", m2) // 輸出:map2: map[]
}

創(chuàng)建通道

使用 make 函數(shù)創(chuàng)建通道時,需要指定通道的類型和緩沖區(qū)大小。如果緩沖區(qū)大小為 0,則創(chuàng)建的是無緩沖通道。

package main

import "fmt"

func main() {
    // 創(chuàng)建一個無緩沖通道
    ch1 := make(chan int)
    go func() {
        ch1 <- 1
    }()
    fmt.Println("ch1:", <-ch1) // 輸出:ch1: 1

    // 創(chuàng)建一個帶緩沖區(qū)大小為 5 的通道
    ch2 := make(chan int, 5)
    ch2 <- 1
    ch2 <- 2
    fmt.Println("ch2 容量:", cap(ch2)) // 輸出:ch2 容量: 5
    fmt.Println("ch2 長度:", len(ch2)) // 輸出:ch2 長度: 2
}

使用 make 函數(shù)的注意事項

  • 與 new 區(qū)別:make 函數(shù)只用于創(chuàng)建切片、映射和通道,并且返回的是初始化后的數(shù)據(jù)結(jié)構(gòu);而 new 函數(shù)用于分配內(nèi)存,并返回指向零值的指針。
  • 初始容量:為切片或映射指定初始容量可以提高性能,特別是在預(yù)期會存儲大量數(shù)據(jù)的情況下。
  • 無緩沖與緩沖通道:無緩沖通道用于同步,而帶緩沖區(qū)的通道則允許異步操作。根據(jù)需求選擇合適的通道類型。

示例代碼

以下是一個綜合示例,展示了如何使用 make 函數(shù)創(chuàng)建切片、映射和通道:

package main

import "fmt"

func main() {
    // 創(chuàng)建切片
    slice := make([]int, 5, 10)
    fmt.Println("切片:", slice) // 輸出:切片: [0 0 0 0 0]
    fmt.Println("切片容量:", cap(slice)) // 輸出:切片容量: 10

    // 創(chuàng)建映射
    m := make(map[string]int)
    m["a"] = 1
    m["b"] = 2
    fmt.Println("映射:", m) // 輸出:映射: map[a:1 b:2]

    // 創(chuàng)建通道
    ch := make(chan int, 5)
    ch <- 1
    ch <- 2
    fmt.Println("通道容量:", cap(ch)) // 輸出:通道容量: 5
    fmt.Println("通道長度:", len(ch)) // 輸出:通道長度: 2
}

總結(jié)

make 是 Go 語言中的一個關(guān)鍵函數(shù),它幫助我們高效地創(chuàng)建和初始化切片、映射和通道。理解和正確使用 make 函數(shù),可以顯著提高代碼的性能和可維護性。希望這篇博客能幫助你更好地理解和使用 Go 語言中的 make 函數(shù),讓你的編程之旅更加順暢。

到此這篇關(guān)于Go語言中內(nèi)建函數(shù)make的使用的文章就介紹到這了,更多相關(guān)Go 內(nèi)建函數(shù)make內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言中循環(huán)Loop的用法介紹

    Go語言中循環(huán)Loop的用法介紹

    這篇文章介紹了Go語言中循環(huán)Loop的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • golang 數(shù)組去重,利用map的實現(xiàn)

    golang 數(shù)組去重,利用map的實現(xiàn)

    這篇文章主要介紹了golang 數(shù)組去重,利用map的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Go語言反射獲取類型屬性和方法示例

    Go語言反射獲取類型屬性和方法示例

    這篇文章主要為大家介紹了本文將介紹?Go?反射?reflect.StructField?和?reflect.Method?相關(guān)的內(nèi)容,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • go1.8之安裝配置具體步驟

    go1.8之安裝配置具體步驟

    下面小編就為大家?guī)硪黄猤o1.8之安裝配置具體步驟。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Golang中深拷貝與淺拷貝詳解

    Golang中深拷貝與淺拷貝詳解

    這篇文章主要為大家詳細(xì)介紹一下Golang深拷貝和淺拷貝,文中有詳細(xì)的代碼示例供大家參考,需要的可以參考一下
    2023-05-05
  • 利用go-kit組件進行服務(wù)注冊與發(fā)現(xiàn)和健康檢查的操作

    利用go-kit組件進行服務(wù)注冊與發(fā)現(xiàn)和健康檢查的操作

    這篇文章主要介紹了利用go-kit組件進行服務(wù)注冊與發(fā)現(xiàn)和健康檢查的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 一文詳解golang中的gmp模型

    一文詳解golang中的gmp模型

    這篇文章主要介紹了golang中的gmp模型的誕生、概念及調(diào)度講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Go語言實現(xiàn)分布式鎖

    Go語言實現(xiàn)分布式鎖

    分布式鎖是控制分布式系統(tǒng)之間同步訪問共享資源的一種方式。如果不同的系統(tǒng)或是同一個系統(tǒng)的不同主機之間共享了一個或一組資源,那么訪問這些資源時,需要通過一些互斥手段來防止彼此之間的干擾以保證一致性,在這種情況下,就需要使用分布式鎖了
    2023-01-01
  • golang 中的 nil的場景分析

    golang 中的 nil的場景分析

    這篇文章主要介紹了golang 中的 nil,本文通過多種場景分析給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Golang源碼分析之golang/sync之singleflight

    Golang源碼分析之golang/sync之singleflight

    golang/sync庫拓展了官方自帶的sync庫,提供了errgroup、semaphore、singleflight及syncmap四個包,本次先分析第一個包errgroup的源代碼,下面這篇文章主要給大家介紹了關(guān)于Golang源碼分析之golang/sync之singleflight的相關(guān)資料,需要的朋友可以參考下
    2022-11-11

最新評論