網(wǎng)站首頁 編程語言 正文
make用法和參數(shù)用法
golang分配內存有一個make函數(shù),該函數(shù)第一個數(shù)類型,第二個參數(shù)的分配的空間,第三個
參數(shù)時預留分配空間,前兩個參數(shù)很好理解,但對第三個參數(shù)不是很理解,
例如a:=make([]int,5,10),len(a)輸出結果為5,cap(a) 輸出結果為10 ,對a[4]可以正常賦值,但是對a[5]進行賦值就會發(fā)現(xiàn)報錯
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個數(shù)據(jù),
如果在使用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的區(qū)別
var p *[]int = new([]int) ? ? ? // 分配切片數(shù)據(jù)結構; *p == nil; 幾乎沒有作用 var v ?[]int = make([]int, 100) // 切片v引用一個[100]int的數(shù)組 // 沒有必要: 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
相關推薦
- 2022-07-08 Python3?Loguru輸出日志工具的使用_python
- 2022-12-05 useReducer?createContext代替Redux原理示例解析_React
- 2023-02-15 PyQt5+PyQt5Designer的安裝步驟_python
- 2022-06-22 Pandas數(shù)據(jù)結構中Series屬性詳解_python
- 2022-08-05 HttpUtil發(fā)送外部請求包工具類
- 2022-09-15 C語言實現(xiàn)通訊錄系統(tǒng)課程設計_C 語言
- 2022-05-03 ASP.NET?Core基于滑動窗口實現(xiàn)限流控制_實用技巧
- 2022-11-22 Python?arrow模塊使用方法_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支