go 聲明二維數組_一篇文章了解Go語言中數組Arrays的使用內幕

概述

與其他編程語言類似,Go語言也有數組array。Go語言中,數組的行為和其他語言沒有什么不同.Go語言中還有一個叫做切片slice的東西,它就像是對數組的引用。在本文中,我們將只研究數組。

定義

數組是同一類型元素的連續集合,它是連續存儲在內存中的有序元素序列。

下面是數組聲明的格式:

09fc8f32cf62c7b987d18331a1f61ee2.png
  • size_of_array:數組大小或數組長度,表示數組中所有元素的數量
  • type :數組元素類型,表示數組中每一個元素的類型
  • a1, a2 … an:表示數組中實際的元素值

Go語言中,數組的大小是其類型的一部分。這意味著兩個擁有不同數量元素的數組是兩種不同的類型,它們不能互相賦值。如果我們試圖賦值兩個不同長度的數組,將引發以下錯誤:

8c3d81af36f7f2892b2831961adc51ba.png

下面是代碼示例:

6acd34d8fb463df6be53c3266f98552e.png

出于同樣的原因,數組的長度在創建時是固定的,以后不能更改。

數組的聲明

元素數量和元素值在數組聲明中都是可選的。

在下面的示例中,我們看到了聲明數組的4種方法。

同時聲明數組長度和元素值,如下所示:

8777a1a1f9e25056f0f5eb5ffa205fa6.png

只聲明數組長度,這種情況下,所有實際元素值都是該類型的默認零值填充,如下所示:

91a3fed70eda55cc277032b0bf3a809c.png

只聲明元素值,這種情況下,數組的長度將等于實際元素的數目。當不指定長度時,需要將符號...放在方括號內。該符號是讓編譯器計算數組長度的指令。

1a379073759d41f6bca358113bc95a47.png

不聲明數組長度和元素值,這種情況下,創建的是一個空數組,類似于上面,符號...也需要使用。

c73b2c5bfa31359c6b3a9db33cebfe6e.png

下面是以上4種數組聲明的代碼示例。內置函數len()是用于計算數組的長度。在下面的程序中,我們使用len()函數來計算數組的長度。

e18e2ca5dce8f3d7fc87ae87e9e7acd2.png

請注意,在上面的示例中,對于sample3變量,實際的元素值被int類型的默認值填充,即0。

如果指定的實際元素個數小于數組的長度,也是可以,其余元素將使用該類型的默認零值填充。請參見下面的示例,指定的數組長度為4,而只聲明了2個實際元素值,因此,剩下的兩個元素被賦值為0,這是int類型的默認零值。

0b49374ba2be65927336ab1db796fbf9.png

訪問數組元素

由于數組元素是以連續的方式存儲的,所以我們可以通過索引來訪問數組元素。同樣,也可以使用索引為某個數組元素賦值。訪問越界索引將導致編譯錯誤。請參閱下面的示例,第一個索引位置為零,最后一個索引為數組長度減1(length_of_array-1)

be38876e966ae90bbe15923961c34d52.png

取消對下面這行代碼的注釋:

b61f9344dcbb971e29689f4ae1a88f92.png

你就會得到一條編譯錯誤:

a6ee50f3d590942da685b3c2d4dbaee4.png

Go語言中的數組是值

數組在Go語言中的屬于值類型,所以數組變量名不是指向第一個元素的指針,實際上它表示整個數組。

當以下情形發生時,一個數組的副本會被創建:

  • 一個數組變量被賦值給另一個數組變量
  • 數組變量作為參數傳遞給函數

讓我們用另一個例子來看看:

247f433f118fea4f5fdb69253c097edd.png

在上面的例子中,

  • 我們將sample1賦值給sample2,然后將sample2處的第0個索引的元素更改為不同的值。之后,當我們打印sample1時,我們看到它沒有改變。這是因為當將sample1賦值給sample2時,會創建一個副本賦給它,而更改sample2對sample1沒有任何影響。
  • 我們將sample1傳遞給test函數,然后在test函數的第0個索引處再次更改其值。當我們再次打印sample1時,看到它仍然沒有任何改變。原因是相同的,當sample1作為參數傳遞給test函數時,會創建sample1的副本。

迭代數組的不同方法

可以使用以下方法迭代一個數組:

  • 使用for循環
  • 使用for-range循環

讓我們看看下面的代碼示例:

14304dac68cb815a4616180f91530fa5.png

多維數組

下面是聲明一個二維數組的格式:

7b5ce6aaff6c6e05d30243f32102b465.png

其中,

  • x表示行數
  • y表示列數
  • aij表示i行j列的元素

同樣的想法可以擴展到三維、四維等等。我們上面討論的所有規則也適用于多維數組。

讓我們看一個代碼示例:

cf9c4ac52fa25158575553e8c719861b.png

在上面的例子中,我們使用第一和第二維的索引來訪問二維數組的元素

28e71a2e3dcf69d78b79889eb57c7f8b.png

還要注意我們是如何遍歷二維數組的。我們需要使用嵌套的range。第一個range遍歷二維數組里的一維數組,第二個range遍歷各個一維數組。

結論

這就是Go語言中關于數組的所有使用內幕,希望你喜歡這篇文章。請在評論中分享反饋和關注。

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

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

相關文章

ffmpeg 使用ffplay 進行 hls 拉流 分析 1

ffmpeg 使用 ffplay 進行 hls 拉流 分析 1 從使用ffplay 調用 http://192.168.1.100:8080/live/livestream.m3u8 開始,進入到ffmpeg 的分析使用的協議選擇相應的解復用器的步驟。 其他協議或者文件方式的使用ffplay也是這個步驟流程的。 目錄:一、流程圖…

搜狗輸入法輸出特殊符號快捷鍵

https://www.petefreitag.com/cheatsheets/ascii-codes/ 參考上個編碼網站大全 詳細步驟為:alt長按 + 編碼數字 例如:平方的編碼為178-----長按alt178 即可,178是數字一個一個挨個按即可 常用的特殊符號如下: 平方&…

echo 12345678 | base64 產生的結果跟12345678真正的base64編碼不對

echo "12345678" | base64 產生的結果跟"12345678"真正的base64編碼不對 弄了好久才搞清楚,echo 命令是帶換行符的,改成echo -n "12345678" | base64就沒問題了轉載于:https://www.cnblogs.com/senix/archive/2013/01/30/…

[BuildRelease Management]CC.NET架構

一 CC.NET的操作流程 1) 等待Trigger的喚醒; 2)從Source Control System查詢上次build以后的修改列表; 3)如果任何修改被發現或是Trigger觸發類型為 force the build : 3.1)為build產生一個label number&a…

python 入門到實踐期末考試常出現的考試內容_Python編程入門到實踐—列表篇(一)...

一、列表是什么?列表由一系列按特定順序排列的元素組成。可以創建包含字母表中所有字母、數字0-9或所有家庭成員姓名的列表;也可以將任何東西加入列表中,其中的元素之間可以沒有任何關系。列表通常包含多個元素,給列表指定一個表示…

c#中將集合寫入文本_在C#中將記錄插入MySQL數據庫

c#中將集合寫入文本In the last tutorial (how to connect with MySQL database in C#?), we learned about making the connection with MySQL database in C#. Here, in this tutorial, we will learn how to insert the records in MySQL database in C#? 在上一教程( 如何…

read/fread write/fwrite 的區別

fread就是通過read來實現的,fread是C語言的庫,而read是系統調用。 差別在read每次讀的數據是調用者要求的大小,比如調用者要求讀取10個字節數據,read就會從內核緩沖區(操作系統開辟的一段空間用來存儲磁盤上的數據&am…

如何在子網中訪問上層網絡的計算機文件夾

場景 公司路由器A,直接接外部網線,內部ip192.168.11.1,lan口又接了路由器A1,IP為192.168.11.2,A1的lan端口接了一臺電腦A,Ip為192.168.0.2,接了另外一個路由A2,Ip為192.168.11.3&…

基于Web的套打方案分析

應用web化,不論對開發商,還是對用戶來說,實在是一種很經濟的選擇,因為基于web的應用,客戶端的規則很簡單,容易學習,容易維護,容易發布。但對程序員來說,因為瀏覽器的局限…

day1-Linux操作系統基礎

該專欄所有內容筆記均來自傳智播客培訓班 1.什么是操作系統(operate system OS) 小議:承上啟下作用,向下可以控制硬件,向上能夠支持軟件的運行。一個可以控制硬件的軟件。 小明找小紅聊天,小明打開QQ&…

關閉瀏覽器 清空session_跨境網絡小知識之Session

跨境小伙伴們大家好,上一篇為大家介紹了Cookie,今天就為大家介紹下連接cookie的另一端Session,交互過程中,二者缺一不可。與Cookie相對,Session是存儲在服務端的,他們之間是通過一個叫做sessionID的東東建立…

我和乘子交替方向法admm_找到最大和交替子序列

我和乘子交替方向法admmProblem statement: 問題陳述: Given a sequence of numbers, you have to find the maximum sum alternating subsequence and print the value. A sequence is an alternating sequence when it will be maintain like (increasing) ->…

Dojo學習筆記(一):Hello Dojo!

歡迎來到Dojo世界!在這篇文章中你將會學習到如何加載Dojo以及探索Dojo的一些核心功能。你還會了解Dojo的基于AMD的模塊架構,探索如何加載額外的模塊來增加功能到您的Web站點或應用程序,并找出在出錯的時如何得到幫助。讓我們開始吧 開始學習D…

轉:我眼中的Visual Studio 2010架構工具

來自:http://www.cnblogs.com/wayfarer/archive/2010/07/30/1788398.html我眼中的Visual Studio 2010架構工具影響架構質量的是構建體系架構的思想、原則、實踐與架構師的經驗,絕不是工具。即使是最優秀的架構工具,也不可能像倚天寶劍一般——…

VMware創建Ubuntu操作系統到網絡配置詳細流程

一、創建虛擬機 Ubuntu下載鏈接 1,看個人需求了,有更高的版本,下載Ubuntu鏡像 2,VMware官網隨便下載即可 3,創建新的虛擬機 4,自定義 5,默認即可 6,稍后安裝操作系統 7&#xf…

djiango配置mysql_數據庫MySQL相關環境配置以及數據庫與Go的連接

Linux下安裝好MySQL后,Windows安裝可視化工具navicatLinux下MySQL與Windows下navicat進行連接:安裝的過程很是揪心,各種查網站、大致把坑都寫了出來:1、在Linux下的mysql語句中,mysql> select host,user,authentication_string…

緩沖文件系統(fopen/fread/fwrite)和非緩沖文件系統(open/read/write)

open:系統調用,返回的是文件描述符,即文件句柄,是文件在文件描述副表里的索引。 fopen:C語言庫函數,返回的是一個指向文件結構的指針。fopen是ANSI C標準中的C語言庫函數,在不同的操作系統中應…

java 繼承示例_Java中的繼承類型以及示例

java 繼承示例Prerequisite: Inheritance and its implementation in Java 先決條件: 繼承及其在Java中的實現 Java中的繼承類型 (Type of inheritance in Java) In Java programming, there are following types of the inheritances, 在Java編程中,有…

基于HtmlParser的網絡爬蟲

一、 目標 獲取網頁中的超鏈接及鏈接名,如從http://www.hao123.com/開始,抓取所有hao123鏈接到的超鏈接,再以獲取到的鏈接網頁為目標,獲取它所鏈接到的網頁。 二、環境及開發工具 環境:Java 工具:MyEclip…

VMware下Ubuntu無法全屏顯示問題

一、運行Ubuntu的時候無法全屏顯示,如圖所示下載VMware Tools 二、之后將下載的文件拷貝到home文件夾下 三、解壓該壓縮包 由于該壓縮包是.tar.gz結尾的故壓縮命令:tar -zxvf VMwareTools-10.2.5-8068393.tar.gz,當然各版本有可能不一樣&am…