第3章:Go語言復合數據類型

第3章:Go語言復合數據類型

1. 數組

1.1 數組聲明和初始化

// 方式1:聲明固定長度數組
var numbers [5]int  // 聲明一個包含5個整數的數組,默認零值// 方式2:初始化數組
arr1 := [5]int{1, 2, 3, 4, 5}  // 完全初始化// 方式3:部分初始化
arr2 := [5]int{1, 2}  // 前兩個元素為1,2,其余為0// 方式4:自動推斷數組長度
arr3 := [...]int{1, 2, 3, 4, 5}  // 長度自動計算為5// 方式5:指定索引初始化
arr4 := [5]int{1: 10, 3: 30}  // 索引1和3位置賦值,其他為0

1.2 數組遍歷

// 方式1:傳統for循環
numbers := [5]int{10, 20, 30, 40, 50}
for i := 0; i < len(numbers); i++ {fmt.Printf("索引 %d: %d\n", i, numbers[i])
}// 方式2:range遍歷
for index, value := range numbers {fmt.Printf("索引 %d: %d\n", index, value)
}// 只需要值,忽略索引
for _, value := range numbers {fmt.Println(value)
}

2. 切片(Slice)

2.1 切片的創建和使用

// 方式1:從數組創建切片
arr := [5]int{1, 2, 3, 4, 5}
slice1 := arr[1:4]  // 包含索引1到3的元素// 方式2:直接創建切片
slice2 := []int{1, 2, 3, 4, 5}// 方式3:使用make創建
slice3 := make([]int, 5)       // 長度為5的切片
slice4 := make([]int, 5, 10)   // 長度5,容量10的切片

2.2 切片操作

// 添加元素
slice := []int{1, 2, 3}
slice = append(slice, 4)        // 添加單個元素
slice = append(slice, 5, 6, 7)  // 添加多個元素// 復制切片
src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src)// 刪除元素
slice = append(slice[:2], slice[3:]...)  // 刪除索引2的元素// 切片截取
subSlice := slice[1:4]  // 獲取子切片

2.3 動態擴展

// 自動擴容機制
slice := []int{}
for i := 0; i < 20; i++ {slice = append(slice, i)fmt.Printf("長度:%d, 容量:%d\n", len(slice), cap(slice))
}

3. Map

3.1 Map的聲明和初始化

// 方式1:使用make創建
ages := make(map[string]int)
ages["Alice"] = 25
ages["Bob"] = 30// 方式2:直接初始化
scores := map[string]int{"Math":    90,"English": 85,
}// 檢查鍵是否存在
value, exists := scores["Math"]
if exists {fmt.Println("找到值:", value)
}

3.2 Map增刪改查

// 添加和修改
users := map[string]string{}
users["admin"] = "password"  // 添加
users["admin"] = "newpass"   // 修改// 刪除
delete(users, "admin")// 遍歷
for key, value := range users {fmt.Printf("%s: %s\n", key, value)
}

4. 結構體

4.1 結構體定義

// 基本結構體定義
type Person struct {Name stringAge  int
}// 創建結構體實例
alice := Person{Name: "Alice",Age:  25,
}// 匿名結構體
student := struct {Name stringAge  int
}{Name: "Bob",Age:  20,
}

4.2 方法和接收者

// 值接收者方法
func (p Person) Introduce() string {return fmt.Sprintf("我是%s,今年%d歲", p.Name, p.Age)
}// 指針接收者方法
func (p *Person) Birthday() {p.Age++
}// 使用方法
alice := Person{Name: "Alice", Age: 25}
fmt.Println(alice.Introduce())
alice.Birthday()

4.3 結構體嵌套

// 匿名嵌套
type Employee struct {Person  // 匿名嵌套Company string
}// 有名字的嵌套
type Company struct {employee PersonAddress  string
}// 使用
emp := Employee{Person:  Person{Name: "Charlie", Age: 30},Company: "Google",
}
fmt.Println(emp.Name)  // 可以直接訪問嵌套結構體的字段

4.4 結構體標簽(tag)

// 結構體標簽
type Person struct {Name string `json:"name"`Age  int    `json:"age"`
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65266.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uniapp-vue3 實現, 一款帶有絲滑動畫效果的單選框組件,支持微信小程序、H5等多端

采用 uniapp-vue3 實現, 是一款帶有絲滑動畫效果的單選框組件&#xff0c;提供點狀、條狀的動畫過渡效果&#xff0c;支持多項自定義配置&#xff0c;適配 web、H5、微信小程序&#xff08;其他平臺小程序未測試過&#xff0c;可自行嘗試&#xff09; 可到插件市場下載嘗試&…

深度學習GPU服務器推薦:打造高效運算平臺

文章來源于百家號&#xff1a;GPU服務器廠家 在深度學習和人工智能領域&#xff0c;一個高性能的GPU服務器是研究和開發工作的關鍵。今天&#xff0c;我們將為大家推薦一款基于詳細硬件配置表的深度學習GPU服務器&#xff0c;它專為高效運算和數據處理而設計。 一、機箱設計 …

2025第1周 | JavaScript中的正則表達式

目錄 1. 正則表達式是個什么東東&#xff1f;1.1 怎么定義正則1.2 對象字面量方式1.3 類創建方式 2. 怎么使用2.1 實例方法2.1.1 exec方法2.1.2 test方法 2.2 字符串中的方法2.2.1 match/matchAll2.2.2 replace/replaceAll2.2.3 split2.2.4 search 3. 規則3.1 修飾符3.2 字符類…

大模型LLM-Prompt-OPTIMAL

1 OPTIMAL OPTIMAL 具體每項內容解釋如下&#xff1a; Objective Clarity&#xff08;目標清晰&#xff09;&#xff1a;明確定義任務的最終目標和預期成果。 Purpose Definition&#xff08;目的定義&#xff09;&#xff1a;闡述任務的目的和它的重要性。 Information Gat…

78、使用愛芯派2_AX630C開發板 3.2T高有效算力 低功耗 支持AI-ISP真黑光實驗

基本思想:使用愛心元智最新的版本開發板進行實驗 AX630C、AX620Q 都是 620E 這一代 一、參考這個官方教程,先把代碼在本地交叉編譯完成 https://github.com/AXERA-TECH/ax620e_bsp_sdk 然后在拷貝到620c設備上 root@ax630c:~/ax620e_bsp_sdk/msp/out/arm64_glibc/bin# ./…

C語言 掃雷程序設計

目錄 1.main函數 2.菜單打印menu函數 3.游戲game函數 4.宏定義 5.界面初始化 6.打印界面 7.設置雷 8.統計排查坐標周圍雷的個數 9.排查雷 10.總代碼 test.c代碼 game.h代碼 game.c代碼 結語&#xff1a; 一個簡單的掃雷游戲&#xff0c;通過宏定義可以修改行列的…

《高速公路警察模擬器》

一個引人入勝的警察故事在等著你&#xff0c;你可以選擇扮演男警官或女警官。公路警察模擬器》擁有休閑和模擬兩種游戲模式&#xff0c;將兩個世界的精華結合在一起&#xff1a;在身臨其境的虛擬環境中自由駕駛和行走&#xff0c;在故事驅動的游戲中解決各種令人興奮的案件。探…

EasyGBS小知識:如何確保攝像機的網絡連接穩定?

在當今數字化時代&#xff0c;視頻監控系統已成為保障安全和提高效率的重要工具。然而&#xff0c;攝像機的網絡連接穩定性直接關系到監控系統的可靠性和有效性。為了確保視頻監控系統能夠持續穩定地運行&#xff0c;我們需要從硬件、網絡設置、軟件與監控以及安裝與維護等多個…

微服務-Eureka

Eureka的作用 使用RestTemplate完成遠程調用需要被調用者的ip和端口&#xff0c;從而能夠發起http請求&#xff0c;但是如果有很多個實例也更加不能有效的處理&#xff0c;而且我們又該如何知道這些實例是否健康呢。所以就有了很多的注冊中心比如Eureka、Nacos等等。 服務注…

LabVIEW軟件侵權分析與應對

問&#xff1a;如果涉及到LabVIEW軟件的仿制或模仿&#xff0c;特別是在功能、界面等方面&#xff0c;如何判斷是否構成侵權&#xff1f;該如何應對&#xff1f; 答&#xff1a;LabVIEW軟件的侵權問題&#xff0c;尤其是在涉及到仿制或模仿其功能、界面、設計等方面&#xff0…

MATLAB仿真:基于GS算法的經大氣湍流畸變渦旋光束波前校正仿真

GS算法流程 GS&#xff08;Gerchberg-Saxton&#xff09;相位恢復算法是一種基于傅里葉變換的最速下降算法&#xff0c;可以通過輸出平面和輸入平面上光束的光強分布計算出光束的相位分布。圖1是基于GS算法的渦旋光束畸變波前校正系統框圖&#xff0c;在該框圖中&#xff0c;已…

數樹數(中等難度)

題目&#xff1a; 解題代碼&#xff1a; n,qmap(int,input().split())#分別輸入層數和路徑數量 for i in range(q):sinput()#輸入“L”或“R”x1for j in s:if j "L":xx*2-1 #&#xff01;&#xff01;&#xff01;規律else:xx*2print(x)

高效內存管理與調試技巧:深入解析 AddressSanitizer

在現代 C開發中&#xff0c;內存管理是一個至關重要但也容易出錯的領域。即使使用了智能指針和其他高效工具&#xff0c;復雜的項目仍可能出現內存泄漏、非法訪問等問題。為了解決這些問題&#xff0c;Google 開發了一個強大的工具——AddressSanitizer (ASan)。本文將詳細介紹…

Vue3 內置組件之Teleport

文章目錄 Vue3 內置組件之Teleport概述用法 Vue3 內置組件之Teleport 概述 Teleport 中文翻譯為“瞬間移動”&#xff0c;顧名思義&#xff0c;在Vue3 中 <Teleport> 組件可以將組件中內容移動到指定的目標元素上。 用法 <script setup> import {ref} from &qu…

【我的 PWN 學習手札】IO_FILE 之 FSOP

FSOP&#xff1a;File Stream Oriented Programming 通過劫持 _IO_list_all 指向偽造的 _IO_FILE_plus&#xff0c;進而調用fake IO_FILE 結構體對象中被偽造的vtable指向的惡意函數。 目錄 前言 一、glibc-exit函數淺析 二、FSOP 三、Largebin attack FSOP &#xff08;…

函數指針的用法

函數指標一些相關的用法和注意事項。以下將詳細說明&#xff1a; 1. 基本寫法: 這是最常見且明確的寫法&#xff0c;尤其在處理重載函數時非常有用。 void (GirlFriend::*girl2)(QString) &GirlFriend::hungry;void: 指標所指向的函數的回傳型別。(GirlFriend::*): 表示…

DDcGAN_多分辨率圖像融合的雙鑒別條件生成對抗網絡_y譯文馬佳義

摘要&#xff1a; 在本文中&#xff0c;我們提出了一種新的端到端模型&#xff0c;稱為雙鑒別條件生成對抗網絡&#xff08;DDcGAN&#xff09;&#xff0c;用于融合不同分辨率的紅外和可見光圖像。我們的方法建立了一個生成器和兩個鑒別器之間的對抗博弈。生成器的目的是基于特…

springboot配置線程池

直接上代碼 配置 定義一個配置類 創建一個springboot能掃描到的地方創建一個線程池配置類 配置信息 package com.example.demonew.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import or…

【君正T31開發記錄】12.編譯工具相關總結及介紹

移植交叉工具包的時候&#xff0c;發現這是很多工具的集合包&#xff1b;以及寫makefile的時候&#xff0c;也需要了解下這些工具的作用及用法&#xff0c;這里總結記錄一下常見的工具及相關用法。 g C編譯器&#xff0c;用于編譯C源代碼文件&#xff0c;這個很常見&#xff0…

如何讓面向應急管理的多智能體具備自主決策能力

現代應急管理面對的是復雜、多變、跨部門的災害與事故場景——從自然災害&#xff08;洪水、地震、臺風、火災&#xff09;到公共安全事件&#xff08;疫情、重大安全事故&#xff09;&#xff0c;都需要在極短時間內進行快速響應和全局協同。傳統的集中式指揮模式雖然有效&…