<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] 上一章講的是 `array` 數組,實際使用頻率不是很高。因為它是不能擴容的。定義的時候寫3的值,就是固定三個值。所以才有本文介紹的 `slice` 切片類型。 切片(Slice)是一個擁有相同類型元素的可變長度的序列。它是基于數組類型做的一層封裝。它非常靈活,支持自動擴容。 切片是一個引用類型,它的內部結構包含 `地址` 、 `長度` 和 `容量` 。 ## 切片定義 ```go // (1) 定義并初始化 var s1 = []string{"jiaxzeng"} fmt.Printf("s1: %v\n", s1) // (2) 基于數組切片 var a1 = [5]int{1, 2, 3, 4, 5} // 切片操作都是左閉右開 [) // 從a1索引1開始切到2。 s2 := a1[1:3] // 從a1索引0開始切到2,冒號前面空,則說明從開頭開始 s3 := a1[:3] // 從a1索引3開始切到結尾,冒號后面空,則說明切到最后。包含最后一個 s4 := a1[3:] fmt.Printf("s2: %d, type: %T\n", s2, s2) fmt.Printf("s3: %d, type: %T\n", s3, s3) fmt.Printf("s4: %d, type: %T\n", s4, s4) // 運行結果: // s1: [jiaxzeng] // s2: [2 3], type: []int // s3: [1 2 3], type: []int // s4: [4 5], type: []int ``` ## make定義切片 如果需要動態的創建一個切片,我們就需要使用內置的make()函數 make函數定義切片語法:`make(Type, len, cap)` ```go s5 := make([]int, 3, 5) fmt.Printf("s5: %d, type: %T, len: %d, cap: %d\n", s5, s5, len(s5), cap(s5)) // 運行結果: // s5: [0 0 0], type: []int, len: 3, cap: 5 ``` ## 切片的地址、長度和容量 可以通過使用內置的len()函數求長度,使用內置的cap()函數求切片的容量,使用 `fmt.Printf("%T", variable)` 打印地址 示例一: ```go s6 := []string{"beijing", "guangdong", "shagnhai"} for i := 0; i < len(s6); i++ { fmt.Printf("s6[%d]: %s, pointer: %p\n", i, s6[i], &s6[i]) } fmt.Printf("s6: %v, len: %d, cap: %d, pointer: %p\n", s6, len(s6), cap(s6), s6) // 運行結果: // s6[0]: beijing, pointer: 0xc000100150 // s6[1]: guangdong, pointer: 0xc000100160 // s6[2]: shagnhai, pointer: 0xc000100170 // s6: [beijing guangdong shagnhai], len: 3, cap: 3, pointer: 0xc000100150 ``` 示例二: ```go var a2 = [5]int{1, 2, 3, 4, 5} for i := 0; i < len(a2); i++ { fmt.Printf("a2[%d]: %d, pointer: %p\n", i, a2[i], &a2[i]) } s7 := a2[:3] fmt.Printf("s7: %v, len: %d, cap: %d, pointer: %p\n", s7, len(s7), cap(s7), s7) // 運行結果: // a2[0]: 1, pointer: 0xc0000ba000 // a2[1]: 2, pointer: 0xc0000ba008 // a2[2]: 3, pointer: 0xc0000ba010 // a2[3]: 4, pointer: 0xc0000ba018 // a2[4]: 5, pointer: 0xc0000ba020 // s7: [1 2 3], len: 3, cap: 5, pointer: 0xc0000ba000 ``` 示例三: ```go var a3 = [5]int{1, 2, 3, 4, 5} for i := 0; i < len(a3); i++ { fmt.Printf("a3[%d]: %d, pointer: %p\n", i, a3[i], &a3[i]) } s8 := a3[2:4] fmt.Printf("s8: %v, len: %d, cap: %d, pointer: %p\n", s8, len(s8), cap(s8), s8) // 運行結果: // a3[0]: 1, pointer: 0xc0000ba000 // a3[1]: 2, pointer: 0xc0000ba008 // a3[2]: 3, pointer: 0xc0000ba010 // a3[3]: 4, pointer: 0xc0000ba018 // a3[4]: 5, pointer: 0xc0000ba020 // s8: [3 4], len: 2, cap: 3, pointer: 0xc0000ba010 ``` ## 切片原理 切片是一個引用類型,本質就是對底層數組的封裝。它的內部結構包含 `地址` 、 `長度` 和 `容量` 。 引用上面三種情況,相應示意圖如下: 示例一: ![](https://img.kancloud.cn/94/28/942876d067c1aa93753358132c59b390_1017x447.png) 示例二: ![](https://img.kancloud.cn/b2/d0/b2d02f5c57e2bf70d7270c584262be6a_1334x402.png) 示例三: ![](https://img.kancloud.cn/a0/2c/a02c02a1f619a2a9f322205d3d0c2a4d_1336x411.png) >[info] 總結: > 1. 長度是 切片元素個數 > 2. 容量是 切片地址指向的底層數組下標到數組結尾
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看