国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Go 語言數組和切片的區別

開發 前端
數組是一個長度固定的數據類型,其長度在定義時就已經確定,不能動態改變;切片是一個長度可變的數據類型,其長度在定義時可以為空,也可以指定一個初始長度。

在 Go 語言中,數組和切片看起來很像,但其實它們又有很多的不同之處,這篇文章就來說說它們到底有哪些不同。

另外,這個問題在面試中也經常會被問到,屬于入門級題目,看過文章之后,相信你會有一個很好的答案。

數組

數組是同一種數據類型元素的集合,數組在定義時需要指定長度和元素類型。

圖片

例如:[4]int? 表示一個包含四個整數的數組,數組的大小是固定的。并且長度是其類型的一部分([4]int? 和 [5]int 是不同的、不兼容的類型)。

數組元素可以通過索引來訪問,比如表達式 s[n]? 表示訪問第 n 個元素,索引從零開始。

聲明以及初始化

func main() {
var nums [3]int // 聲明并初始化為默認零值
var nums1 = [4]int{1, 2, 3, 4} // 聲明同時初始化
var nums2 = [...]int{1, 2, 3, 4, 5} // ...可以表示后面初始化值的長度
fmt.Println(nums) // [0 0 0]
fmt.Println(nums1) // [1 2 3 4]
fmt.Println(nums2) // [1 2 3 4 5]
}

函數參數

如果數組作為函數的參數,那么實際傳遞的是一份數組的拷貝,而不是數組的指針。這也就意味著,在函數中修改數組的元素是不會影響到原始數組的。

圖片

package main

import (
"fmt"
)

func Add(numbers [5]int) {
for i := 0; i < len(numbers); i++ {
numbers[i] = numbers[i] + 1
}
fmt.Println("numbers in Add:", numbers) // [2 3 4 5 6]
}

func main() {
// declare and initialize the array
var numbers [5]int
for i := 0; i < len(numbers); i++ {
numbers[i] = i + 1
}

Add(numbers)
fmt.Println("numbers in main:", numbers) // [1 2 3 4 5]
}

切片

數組的使用場景相對有限,切片才更加常用。

切片(Slice)是一個擁有相同類型元素的可變長度的序列。它是基于數組類型做的一層封裝。它非常靈活,支持自動擴容。

圖片

切片是一種引用類型,它有三個屬性:指針,長度和容量。

  1. 指針:指向 slice 可以訪問到的第一個元素。
  2. 長度:slice 中元素個數。
  3. 容量:slice 起始元素到底層數組最后一個元素間的元素個數。

底層源碼定義如下:

type slice struct {
array unsafe.Pointer
len int
cap int
}

聲明以及初始化

func main() {
var nums []int // 聲明切片
fmt.Println(len(nums), cap(nums)) // 0 0
nums = append(nums, 1) // 初始化
fmt.Println(len(nums), cap(nums)) // 1 1

nums1 := []int{1,2,3,4} // 聲明并初始化
fmt.Println(len(nums1), cap(nums1)) // 4 4

nums2 := make([]int,3,5) // 使用make()函數構造切片
fmt.Println(len(nums2), cap(nums2)) // 3 5
}

函數參數

當切片作為函數參數時,和數組是不同的,如果一個函數接受一個切片參數,它對切片元素所做的更改將對調用者可見,類似于將指針傳遞給了底層數組。

package main

import (
"fmt"
)

func Add(numbers []int) {
for i := 0; i < len(numbers); i++ {
numbers[i] = numbers[i] + 1
}
fmt.Println("numbers in Add:", numbers) // [2 3 4 5 6]
}

func main() {
var numbers []int
for i := 0; i < 5; i++ {
numbers = append(numbers, i+1)
}

Add(numbers)

fmt.Println("numbers in main:", numbers) // [2 3 4 5 6]
}

再看一下上面的例子,把參數由數組變成切片,Add? 函數中的修改會影響到 main 函數。

總結

最后來總結一下,面試時也可以這么來回答:

  1. 數組是一個長度固定的數據類型,其長度在定義時就已經確定,不能動態改變;切片是一個長度可變的數據類型,其長度在定義時可以為空,也可以指定一個初始長度。
  2. 數組的內存空間是在定義時分配的,其大小是固定的;切片的內存空間是在運行時動態分配的,其大小是可變的。
  3. 當數組作為函數參數時,函數操作的是數組的一個副本,不會影響原始數組;當切片作為函數參數時,函數操作的是切片的引用,會影響原始切片。
  4. 切片還有容量的概念,它指的是分配的內存空間。

以上就是本文的全部內容,如果覺得還不錯的話歡迎點贊,轉發和關注,感謝支持。

參考文章:

  • https://go.dev/doc/effective_go#arrays
  • https://go.dev/blog/slices-intro
  • https://levelup.gitconnected.com/go-programming-array-vs-slice-5902b7fdd436

責任編輯:武曉燕 來源: AlwaysBeta
相關推薦

2022-06-02 13:54:04

Go數組切片

2021-07-13 06:44:04

Go語言數組

2024-05-17 08:47:33

數組切片元素

2024-06-13 09:10:22

2021-04-09 10:38:59

Go 語言數組與切片

2023-04-03 08:02:16

切片擴容GO

2021-05-12 08:47:54

Go數組切片

2023-12-27 08:12:04

切片Go語言

2018-08-20 08:15:50

編程語言Go語言切片

2024-01-09 16:14:39

RustGo切片

2022-04-06 08:19:13

Go語言切片

2022-10-27 19:32:20

切片golang數組

2023-03-24 08:01:27

Go語言內存

2024-10-15 08:57:08

Go語言切片

2022-11-10 07:43:45

2025-02-06 13:19:31

RustPin系統

2022-02-09 16:02:26

Go 語言ArraySlice

2022-02-14 08:25:50

Go語言面試

2024-01-02 10:38:22

Go語言數組

2018-04-19 14:54:12

點贊
收藏

51CTO技術棧公眾號

一区二区三区日本久久久| 日韩精品一二三四| 国产精品系列在线播放| 精品欧美激情精品一区| 日本高清不卡在线| 中文字幕在线中文字幕二区| 亚洲制服欧美另类| 亚洲午夜免费福利视频| 114国产精品久久免费观看| 一本大道香蕉久久| 国产成人av在线影院| 在线欧美一区二区| 国产精品va在线播放我和闺蜜| 综合激情丁香| 91综合在线| 91精品欧美一区二区三区综合在 | 国产国产精品| 色婷婷国产精品综合在线观看| 丝袜亚洲另类欧美重口| 欧美一区二区影视| 欧美亚洲系列| 91免费观看视频在线| 韩国19禁主播vip福利视频| 大香伊人久久| 激情综合自拍| 日韩午夜在线观看| 欧美大胆的人体xxxx| 国产成人一区在线| 欧美成人精品xxx| 天天爱天天做色综合| 国产主播精品| 欧美另类交人妖| 黄视频网站在线看| 亚洲欧美色综合| 国产精品xxxx| 黄在线观看免费网站ktv| 国产欧美一区二区三区网站| 丁香婷婷久久久综合精品国产| 日韩午夜在线| 亚洲国产日韩精品在线| 加勒比日本影视| 久久精品日产第一区二区| 91精品国产综合久久香蕉的特点| 综合久久国产| 日韩一级电影| 亚洲第一福利网| 午夜免费啪视频观看视频| 狠狠狠色丁香婷婷综合激情| 日韩av不卡电影| 精品三级在线| 亚洲欧美在线免费观看| 午夜av电影| 欧美日韩亚洲一区| 欧美日韩在线看| 99久久精品无码一区二区毛片| 阳光姐妹淘韩国版| 成人一级毛片| 91成人免费在线视频| 久久综合入口| 成人性生交大片免费观看网站| 国产欧美日韩亚州综合| 精品久久久999| 人人澡人人爽人人揉| 激情久久久久久久久久久久久久久久| 日韩美女免费观看| 在线免费成人| 亚洲人午夜色婷婷| 欧美人与牲禽动交com| 综合网在线视频| 乱妇乱女熟妇熟女网站| 国产乱码精品一区二区三| 日韩国产精品一区二区| 99热在线精品观看| 91精品美女在线| 青青草97国产精品麻豆| 91av福利视频| 国产一区 二区| 欧美中文字幕亚洲一区二区va在线| 快色在线观看| a级高清视频欧美日韩| 最新黄色av网站| 国产+成+人+亚洲欧洲自线| 91久久精品日日躁夜夜躁国产| 久久婷婷国产| 日韩中文字幕在线免费观看| 日韩欧美亚洲系列| 狠狠色狠狠色综合日日五| www.色偷偷.com| 另类小说欧美激情| 日韩不卡视频一区二区| 韩国成人福利片在线播放| 日本不卡一区二区| 国产一区二区视频在线观看| 成久久久网站| 国产精品久久亚洲7777| 久久先锋影音| 亚洲一区影院| 久久亚洲综合色一区二区三区| 天堂中文视频在线| 亚洲综合色在线| 在线激情网站| 91福利视频久久久久| 高清hd写真福利在线播放| 97aⅴ精品视频一二三区| 99精品视频在线看| 亚洲精品国产精华液| av超碰在线| 亚洲成av人片www| 亚洲久久中文字幕| 欧美午夜片欧美片在线观看| 三级网站视频在在线播放| xxxx性欧美| 久久要要av| 91色中文字幕| 国产精品一区一区三区| 国产乱xxⅹxx国语对白| 欧美日本韩国一区| 国产99re66在线视频| 久久国产精品久久国产精品| 第四色成人网| 99免费在线视频观看| 激情欧美一区二区三区在线观看| 一区二区三区偷拍| 久久婷婷国产综合精品青草| 国产在线天堂www网在线观看| 欧美在线观看一区二区三区| 国产美女在线精品| 裸体裸乳免费看| 91色.com| 最新在线观看av网站| 偷拍与自拍一区| 爱情岛论坛亚洲品质自拍视频网站 | 欧美亚洲视频一区| 老司机一区二区三区| www.涩涩涩| 亚洲男人av电影| 亚洲狼人精品一区二区三区| 黄网站免费入口| 久久精品久久久久久国产 免费| 久久精品官网| 中文字幕在线免费播放| 欧美巨大黑人极品精男| 精品一区二区三区影院在线午夜| 成人在线视频亚洲| 国产精品一区在线观看| 日韩欧美在线字幕| 亚洲精品国产偷自在线观看| 男女18免费网站视频| 日本高清视频精品| 中文字幕一区二区三区四区不卡| 开心久久婷婷综合中文字幕| 在线不卡视频一区二区| 日韩欧美中文字幕在线播放| 极品国产人妖chinesets亚洲人妖| 亚洲精品蜜桃久久久久久| 精品伦理精品一区| 亚洲高清电影| 一区二区成人| 96国产粉嫩美女| 一区二区三区在线观看国产| heyzo欧美激情| 日韩视频免费在线播放| 欧美黑人狂野猛交老妇| 国产精品免费av| 欧美人体视频| 色婷婷综合缴情免费观看| 91丝袜美腿美女视频网站| 欧美日韩国内自拍| 国内精品久久久久久久97牛牛 | 欧美性感美女h网站在线观看免费| 日本不卡免费一区| 国产无套粉嫩白浆在线2022年 | 久久欧美一区二区| 久久久亚洲精华液精华液精华液| 亚洲91av视频| 综合自拍亚洲综合图不卡区| 欧美自拍视频| 樱花在线免费观看| 欧美日韩国产91| 中文字幕欧美三区| 欧美国产极品| 1024在线视频| 国产精品成av人在线视午夜片| 一区在线观看视频| japanese色系久久精品| 成人午夜剧场免费观看完整版| 久久免费国产精品1| 日本vs亚洲vs韩国一区三区| 天堂av网在线| 亚洲欧洲一区二区福利| 久久九九国产精品怡红院 | 亚洲视频资源在线| 欧美xxxxxxxx| 日韩av中字| 欧美日韩亚洲一区二区三区四区| 亚洲国产精品av| 亚洲人体视频| 日韩在线导航| 欧美久久久久久蜜桃| 婷婷综合社区|