網站首頁 編程語言 正文
數組相必大家都很熟悉,各大語言也都有數組的身影。Go 語言也提供了數組類型的數據結構。
1. Array(數組)
數組是同一種數據類型的固定長度的元素集合。在 Go 語言中,數組聲明后長度就不能改變了,可以修改數組的元素,用法:
// eg: 定義一個長度為 10 的 int 數組 var a [10]int
2. 聲明數組
Go 語言數組申明時需要指定元素類型及元素的個數,語法格式如下:
var variable_name [SIZE] variable_type
3. 數組初始化
Go 語言中初始化數組有很多方式。
3.1 方式一
我們也可以通過字面量在聲明數組的同時快速初始化數組:
balance := [5]float32{3.14, 13.0, 33.4, 15.0, 20.0}
3.2 方式二
如果數組長度不確定,可以使用?...
代替數組的長度,編譯器會根據元素個數自行推斷數組的長度:
balance := [...]float32{3.14, 13.0, 33.4, 15.0, 20.0}
3.3 方式三
如果設置了數組的長度,我們還可以通過指定下標來初始化元素:
// 將索引下標為 1 和 3 的元素初始化 balance := [5]float32{1:2.0,3:7.0}
3.4 多維數組
package main import ( "fmt" ) var array1 [5][3]int var array2 [2][3]int = [...][3]int{{10, 20, 30}, {4, 5, 6}} func main() { arr1 := [2][3]int{{10, 11, 12}, {20, 21, 22}} arr2 := [...][2]int{{10, 11}, {20, 21}, {30, 31}} fmt.Println(array1, array2) fmt.Println(arr1, arr2) }
注意:?Go 語言多維數組中,只有第一層可以用?...
其他維度不能用?...
4. 遍歷數組&取值
Go 語言中,遍歷數組有以下兩種方法:
func main() { var users = [...]string{"張三", "李四", "王五"} // 方法1:for range遍歷 for index, item := range users { fmt.Println(index, item) } // 方法2:for循環遍歷 for i := 0; i < len(users); i++ { fmt.Println("姓名:", users[i]) } }
多維數組遍歷
func main() { var f [2][3]int = [...][3]int{{10, 20, 30}, {4, 5, 6}} for k1, v1 := range f { for k2, v2 := range v1 { fmt.Printf("(%d,%d)=%d ", k1, k2, v2) } fmt.Println("-------------") } }
注意:?Go 語言中訪問越界,如果下標在數組合法范圍之外,則觸發訪問越界,會出現?panic
5. 數組拷貝和傳參
Go 語言中數組是值類型,賦值和傳參會復制整個數組。只會改變復制出來臨時數組的值,不會改變本身。
package main import "fmt" func printArr1(arr *[5]int) { // 數組指針 arr[0] = 1000 } func printArr2(arr [5]int) { arr[0] = 1000 } func main() { arr1 := [5]int{100, 200, 300, 400, 500} printArr1(&arr1) fmt.Println(arr1) arr2 := [...]int{2, 4, 6, 8, 10} printArr2(arr2) fmt.Println(arr2) }
控制臺輸出結果:
[1000 200 300 400 500]
[2 4 6 8 10]
注意:
- 數組支持 “==“、”!=” 操作符,因為其內存總是被初始化過的。
- [n]T 表示指針數組,[n]T 表示數組指針 。
原文鏈接:https://segmentfault.com/a/1190000043201189
相關推薦
- 2022-04-16 C++中allocator類使用示例_C 語言
- 2022-07-15 SQL?Server數據表壓縮_MsSql
- 2022-09-16 C++中的位運算和位圖bitmap解析_C 語言
- 2022-12-31 Kotlin?Jetpack組件ViewModel使用詳解_Android
- 2022-04-20 C語言進階棧幀示例詳解教程_C 語言
- 2022-04-30 DataGridView自動設定列寬和行高_C#教程
- 2023-02-09 go?sync?Waitgroup數據結構實現基本操作詳解_Golang
- 2022-07-28 Android?EventBus粘性事件實現機制探究_Android
- 最近更新
-
- 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同步修改后的遠程分支