網站首頁 編程語言 正文
make用法和參數用法
golang分配內存有一個make函數,該函數第一個數類型,第二個參數的分配的空間,第三個
參數時預留分配空間,前兩個參數很好理解,但對第三個參數不是很理解,
例如a:=make([]int,5,10),len(a)輸出結果為5,cap(a) 輸出結果為10 ,對a[4]可以正常賦值,但是對a[5]進行賦值就會發現報錯
package main import "fmt" func main(){ a := make([]int, 5, 10) fmt.Println("len(a):", len(a)) fmt.Println("cap(a):", cap(a)) fmt.Println(a) b := a[:cap(a)] fmt.Println(b) }
使用make常見的一些坑
1:slice使用make
slice在make了之后,設置了slice的大小之后。實際上是在slice里面添加了len個數據,
如果在使用append來操作的話,相當于在slice后面添加新的元素,
arr := make([]int, 10) fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr) arr = append(arr, 1) fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr) arr = make([]int, 10, 20) fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr)
輸出結果
2:map使用map:
注意:map在使用make的時候,就算指定了len,也是不起作用的,這個len起不到限制的作用。如:
temp := make(map[string]int) fmt.Println("len(temp):", len(temp), "temp:", temp) temp1 := make(map[string]int, 3) fmt.Println("len(temp1):", len(temp1), "temp1", temp1)
輸出結果
下面的例子闡述了new和make的區別
var p *[]int = new([]int) ? ? ? // 分配切片數據結構; *p == nil; 幾乎沒有作用 var v ?[]int = make([]int, 100) // 切片v引用一個[100]int的數組 // 沒有必要: var p *[]int = new([]int) *p = make([]int, 100, 100) // 慣用做法: v := make([]int, 100)
記住,make只應用于映射、切片和信道,并且不會返回指針。如果想獲得一個顯式的指針,使用new分配空間或者直接獲取變量的地址。
總結
原文鏈接:https://blog.csdn.net/weixin_54046648/article/details/126948669
相關推薦
- 2023-11-11 【LaTex】如何輸入英文字母的花體字?花體字最全總結
- 2022-06-22 C++詳細分析引用的使用及其底層原理_C 語言
- 2022-07-13 淺談Redis中的自動過期機制_Redis
- 2023-10-26 ElementUI日期轉為“yyyy-MM-dd“格式
- 2024-07-18 【SpringBoot】SpringCache輕松啟用Redis緩存
- 2022-08-29 如何用python將單引號替換為雙引號_python
- 2023-04-03 Python數據結構隊列解決約瑟夫斯問題_python
- 2023-12-23 uni-app消息推送uni-push使用
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支