從零開始:使用make函數創建資料結構

閱讀時間約 5 分鐘


raw-image

👨‍💻簡介

make函數在slice、map和之後會介紹到的channel的初始化中扮演著關鍵的角色。本文將會簡單介紹make函數的用法,以及在初始化不同資料結構時的差異,讓你更好地理解和利用make函數。

make函數基本概念

首先,讓我們來了解一下make函數的基本概念。在Go中,make函數用於動態分配記憶體並初始化slice、map和channel。

// 創建一個切片,長度為5,容量為10
mySlice := make([]int, 5, 10)

在上面的範例中,我們使用make函數創建了一個整數切片(slice),其長度為5,容量為10。這意味著切片可以容納5個元素,但它的底層陣列的容量是10,這為後續的操作提供了一定的靈活性。

make函數的語法

make函數的語法相對簡單。它的一般形式是:

make(類型, 長度, 容量)
  • 類型:指定要創建的資料類型,可以是切片、map或通道。
  • 長度:表示資料結構的初始長度。
  • 容量:只適用於切片和通道,表示底層陣列的容量。

使用make初始化切片

接下來,讓我們看看如何使用make函數初始化切片。

// 創建一個整數切片,長度為3,容量為5
mySlice := make([]int, 3, 5)
mySlice[0] = 1
mySlice[1] = 2
mySlice[2] = 3

在這個例子中,我們首先使用make函數創建了一個長度為3、容量為5的整數切片。然後,我們分配了三個整數值到切片中。

使用make初始化Map

現在,讓我們看看如何使用make函數初始化Map。map是一種鍵值對的資料結構,非常適合用於存儲關聯性資料。

// 創建一個字符串到整數的map
myMap := make(map[string]int)
myMap["apple"] = 1
myMap["banana"] = 2
myMap["cherry"] = 3

在這個範例中,我們使用make函數創建了一個空的字符串到整數的map,然後添加了三個鍵值對。

make 函數在 Go 語言中常見用法包括初始化切片、map和通道。然而,它的使用也受到一些限制和約束。以下是 make 函數的常見用法以及相關的使用限制:

使用make初始化通道

最後,我們來看看如何使用make函數初始化通道。通道是Go語言中用於並發通信的重要機制。

// 創建一個通道,用於傳輸字符串資料
myChannel := make(chan string)
go func() {
myChannel <- "Hello"
myChannel <- "World"
}()

在這個例子中,我們使用make函數創建了一個通道,它可以傳輸字符串資料。然後,我們使用Go協程向通道發送了兩個字符串。

使用限制

  1. 只能用於切片、map和通道make 函數只能用於初始化切片、map和通道,不能用於其他資料類型或自定義類型的初始化。
  2. 切片容量必須大於等於長度:在使用 make 初始化切片時,切片的容量必須大於等於長度。否則,會導致運行時錯誤。
// 正確的範例 
mySlice := make([]int, 5, 10)

// 錯誤的範例,容量小於長度
mySlice := make([]int, 10, 5) // 這會導致運行時錯誤

3. Map無需指定容量:與切片不同,map的容量無需顯示指定,因為map會根據需要動態擴展。

myMap := make(map[string]int) // 正確的初始化map,無需指定容量

4. 通道的容量是可選的:通道的容量是可選的,你可以選擇在創建通道時指定容量,也可以不指定。

myChannel := make(chan int)     // 創建一個無緩衝通道 
myBufferedChannel := make(chan int, 10) // 創建一個有緩衝容量為 10 的通道

5. 通道需要關閉:如果你使用 make 創建的通道,需要負責在適當的時候關閉通道,以避免死鎖。

close(myChannel)

make 函數是 Go 語言中用於初始化切片、map和通道的重要工具,但它有一些使用限制,需要按照上述規則使用,以確保程序的正確性和性能。

make函數的注意事項

在使用make函數時,有一些注意事項。首先,要確保選擇適當的長度和容量,以避免不必要的記憶體浪費。其次,根據你的需求,選擇切片、map或通道來存儲和處理資料。最後,記得釋放不再使用的資料結構,以避免記憶體洩漏。

📚Reference





17會員
83內容數
golang
留言0
查看全部
發表第一個留言支持創作者!
Alan的開發者天地 的其他內容
👨‍💻簡介 套件(Package)在Golang中扮演著組織和管理程式碼的重要角色。 package就像工具箱一樣,裡面裝滿各種不同的工具,每個工具都有特定的功能。這些工具能夠幫助你完成不同的任務,從修理家具到蓋小屋,樣樣都行。
👨‍💻簡介 在Go語言中,Interface 是一個重要且強大的概念。Interface提供了一種方式來定義對象之間的契約,讓你可以設計更具有靈活性和可擴展性的程式碼。 你可以把Interface想像成是一種約定,讓不同的東西彼此溝通的方式變得特別靈活和好擴充,告訴程式裡的各個元件彼此要怎麼合作
👨‍💻簡介 在程式開發的世界中,我們經常需要處理各式各樣的資料,可能是一個人的個人資訊,也可能是一個商品的詳細訊息。當我們面對這麼多的資料時,如何將它們有系統地整理起來,讓我們能夠輕鬆地找到所需,便成了一個重要的課題。這時,結構體的概念就像是一道曙光,為我們提供了一個非常有力的工具。 結
👨‍💻簡介 在 Go 語言中,函數(Function)是一個強大且重要的概念,就像食譜一樣,告訴你應該如何處理食材,最後得到一道美味的料理。經過哪些程序讓程式更有組織性和可讀性。函數可幫助你將程式碼區塊組織成可重複使用的元件,進而執行特定的任務。
👨‍💻簡介 在 Go 語言中,有著一個強大又便捷的工具,可以讓你以鍵-值(Key-Value)的形式儲存和查詢資料,它就是「Map」。Map 在 Go 語言中扮演了重要的角色,簡化了許多資料處理的任務,現在讓我們一起來深入了解這個有趣的資料型別。 Map的基本概念 Map 是 Go 語
👨‍💻簡介 在 Go 語言中,切片(Slice)是一種動態序列的資料結構,能夠方便地存儲和操作多個相同類型的元素。切片相比於陣列,更具有彈性,因為它的大小是可變的,可以根據需要動態增長或縮小。切片在處理集合型資料時非常實用,讓你能夠輕鬆地新增、刪除、修改和操作元素。
👨‍💻簡介 套件(Package)在Golang中扮演著組織和管理程式碼的重要角色。 package就像工具箱一樣,裡面裝滿各種不同的工具,每個工具都有特定的功能。這些工具能夠幫助你完成不同的任務,從修理家具到蓋小屋,樣樣都行。
👨‍💻簡介 在Go語言中,Interface 是一個重要且強大的概念。Interface提供了一種方式來定義對象之間的契約,讓你可以設計更具有靈活性和可擴展性的程式碼。 你可以把Interface想像成是一種約定,讓不同的東西彼此溝通的方式變得特別靈活和好擴充,告訴程式裡的各個元件彼此要怎麼合作
👨‍💻簡介 在程式開發的世界中,我們經常需要處理各式各樣的資料,可能是一個人的個人資訊,也可能是一個商品的詳細訊息。當我們面對這麼多的資料時,如何將它們有系統地整理起來,讓我們能夠輕鬆地找到所需,便成了一個重要的課題。這時,結構體的概念就像是一道曙光,為我們提供了一個非常有力的工具。 結
👨‍💻簡介 在 Go 語言中,函數(Function)是一個強大且重要的概念,就像食譜一樣,告訴你應該如何處理食材,最後得到一道美味的料理。經過哪些程序讓程式更有組織性和可讀性。函數可幫助你將程式碼區塊組織成可重複使用的元件,進而執行特定的任務。
👨‍💻簡介 在 Go 語言中,有著一個強大又便捷的工具,可以讓你以鍵-值(Key-Value)的形式儲存和查詢資料,它就是「Map」。Map 在 Go 語言中扮演了重要的角色,簡化了許多資料處理的任務,現在讓我們一起來深入了解這個有趣的資料型別。 Map的基本概念 Map 是 Go 語
👨‍💻簡介 在 Go 語言中,切片(Slice)是一種動態序列的資料結構,能夠方便地存儲和操作多個相同類型的元素。切片相比於陣列,更具有彈性,因為它的大小是可變的,可以根據需要動態增長或縮小。切片在處理集合型資料時非常實用,讓你能夠輕鬆地新增、刪除、修改和操作元素。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
單車擺攤給人自由、親近又帶點文青的感受,相對便宜的初期成本也確實是個創業的方案。運用幾個小步驟來規劃自己的理想攤車吧!
Thumbnail
在這篇文章中,我分享了我在學習使用牙線過程中的挫折與成功經驗。作為一名容易蛀牙的患者,我曾經嘗試過多種替代方案,但最終發現正確使用牙線才是最有效的。透過研究YouTube上的教學影片,我逐漸掌握了牙線的使用技巧。在文中,我推薦了三支優質的牙線教學影片,幫助更多人理解牙線的重要性並學會正確的使用方法。
Thumbnail
生理假確實屬於非常特別的假種,基於其不用提供請假證明的特殊性,因此雇主難以拒絕給假與查核,但又有性平法第21條特別予以保護,且因生理假逾3日部分應併入病假的規範,也使得許多人資對於生理假產生誤解進而衍生爭議,因此本文旨在說明生理假相關法律規範,包括生理假的申請條件、日數限制及薪資計算方式。
Thumbnail
單車擺攤給人自由、親近又帶點文青的感受,相對便宜的初期成本也確實是個創業的方案。但是!永遠會有個「但是」!
Thumbnail
男人困境 50 從零開始累積社交經驗,你可以使用的三個媒介   男人與女人在社交學習最大的不同,就是練習的劑量。   女人站著就能被動吸怪過來練習,但男人不同,需要主動出擊。   主動出擊的缺點就是在沒有累積一定程度的社交直覺時,你很容易就做錯事情被打槍,不只被女人打槍,也會被男人看不起
Thumbnail
創業是許多人夢寐以求的一件事情。然而,要從零開始創業並不容易。很多人在創業過程中遇到了各種困難和挑戰,有些甚至失敗了。然而,如果你有一個好的創業想法並且有足夠的勇氣和毅力,那麼從零開始創業仍然是值得一試的。 在這篇文章中,我將分享一些從零開始創業的建議,以幫助你更好地開始你的創業之旅。 第一步:確定
Thumbnail
➤ 前言:Azure OpenAI 提供全面、高效的人工智能服務 在當今的數字化時代,企業和組織需要應對複雜的業務需求,而人工智能成為了實現這些需求的關鍵技術之一。 作為 Microsoft Azure 平台上一個全面、高效的人工智能服務,Azure OpenAI 提供了多種 AI 功能,包括自然語
Thumbnail
Weebly作為一個初入網站建置的人來說,是一個很適合入門的網站建置工具,你可以透過熟悉它,讓它成為你未來製作網站時的模板及練習。以下請跟著我的腳步,一起來認識這個工具吧!
Thumbnail
系統數位化管理 科技日新月異,企業要進行大數據分析是無法避免,加上COVID-19強勢來襲,大數據議題紛紛被提起,並且加速企業進入數位轉型的腳步,利用數據分析,站在客觀的角度找尋消費者真正的需求並深入分析客戶體驗,更進一步的判斷消費者行為,進而達到企業最終利潤。 ERP系統化管理 1.系統管理
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
單車擺攤給人自由、親近又帶點文青的感受,相對便宜的初期成本也確實是個創業的方案。運用幾個小步驟來規劃自己的理想攤車吧!
Thumbnail
在這篇文章中,我分享了我在學習使用牙線過程中的挫折與成功經驗。作為一名容易蛀牙的患者,我曾經嘗試過多種替代方案,但最終發現正確使用牙線才是最有效的。透過研究YouTube上的教學影片,我逐漸掌握了牙線的使用技巧。在文中,我推薦了三支優質的牙線教學影片,幫助更多人理解牙線的重要性並學會正確的使用方法。
Thumbnail
生理假確實屬於非常特別的假種,基於其不用提供請假證明的特殊性,因此雇主難以拒絕給假與查核,但又有性平法第21條特別予以保護,且因生理假逾3日部分應併入病假的規範,也使得許多人資對於生理假產生誤解進而衍生爭議,因此本文旨在說明生理假相關法律規範,包括生理假的申請條件、日數限制及薪資計算方式。
Thumbnail
單車擺攤給人自由、親近又帶點文青的感受,相對便宜的初期成本也確實是個創業的方案。但是!永遠會有個「但是」!
Thumbnail
男人困境 50 從零開始累積社交經驗,你可以使用的三個媒介   男人與女人在社交學習最大的不同,就是練習的劑量。   女人站著就能被動吸怪過來練習,但男人不同,需要主動出擊。   主動出擊的缺點就是在沒有累積一定程度的社交直覺時,你很容易就做錯事情被打槍,不只被女人打槍,也會被男人看不起
Thumbnail
創業是許多人夢寐以求的一件事情。然而,要從零開始創業並不容易。很多人在創業過程中遇到了各種困難和挑戰,有些甚至失敗了。然而,如果你有一個好的創業想法並且有足夠的勇氣和毅力,那麼從零開始創業仍然是值得一試的。 在這篇文章中,我將分享一些從零開始創業的建議,以幫助你更好地開始你的創業之旅。 第一步:確定
Thumbnail
➤ 前言:Azure OpenAI 提供全面、高效的人工智能服務 在當今的數字化時代,企業和組織需要應對複雜的業務需求,而人工智能成為了實現這些需求的關鍵技術之一。 作為 Microsoft Azure 平台上一個全面、高效的人工智能服務,Azure OpenAI 提供了多種 AI 功能,包括自然語
Thumbnail
Weebly作為一個初入網站建置的人來說,是一個很適合入門的網站建置工具,你可以透過熟悉它,讓它成為你未來製作網站時的模板及練習。以下請跟著我的腳步,一起來認識這個工具吧!
Thumbnail
系統數位化管理 科技日新月異,企業要進行大數據分析是無法避免,加上COVID-19強勢來襲,大數據議題紛紛被提起,並且加速企業進入數位轉型的腳步,利用數據分析,站在客觀的角度找尋消費者真正的需求並深入分析客戶體驗,更進一步的判斷消費者行為,進而達到企業最終利潤。 ERP系統化管理 1.系統管理