1. 程式人生 > >Golang從入門到精通(八):Golang陣列

Golang從入門到精通(八):Golang陣列

陣列定義

陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列(這是一種同構的資料結構);這種型別可以是任意的原始型別例如整形、字串或者自定義型別。陣列長度必須是一個常量表達式,並且必須是一個非負整數。需要強調:陣列長度也是陣列型別的一部分。

Go語言陣列

陣列是Go語言程式設計中最常用的資料結構之一。顧名思義,陣列就是指一系列同一型別資料的集合。陣列中包含的每個資料被稱為陣列元素( element),一個數組包含的元素個數被稱為陣列的長度。需要強調的一點是Go語言中陣列的長度固定,無法擴容。

宣告定義

陣列在定義初始化的時候,長度可以指定,也可以不指定讓編譯器自動推斷。幾種常見的陣列定義初始化的方式如下:

var a [3] int   //3個int型的陣列,初始值是3個0,陣列“零值”狀態
arr:=[5]int{1,2,3,4,5}   //定義並初始化長度為5的陣列
var array2 = [...]int{6, 7, 8} //不宣告長度
q := [...] int {1,2,3} //不宣告長度
r := [...] int {99:-1}  //長度為100的陣列,只有最後一個是-1,其他都是0

在宣告var arr1 [5]int中每個元素是一個整形值,當宣告陣列時所有的元素都會被自動初始化為預設值 0。

陣列元素訪問

Go語言中,可以使用陣列下標來訪問陣列中的元素。陣列下標從0開始,len(arr)-1

則表示最後一個元素的下標。

只有有效的索引可以被使用,當使用等於或者大於 len(arr)的索引時:如果編譯器可以檢測到,會給出索引超限的提示資訊;如果檢測不到的話編譯會通過而執行時會 panic

比起C語言,Go語言可以直接呼叫列印函式打印出整個陣列。下面我們定義一個二維陣列,然後來打印出陣列長度和整個陣列:

package main

import "fmt"

func main() {
    myArray := [3][4]int{{1,2,3,4},{1,2,3,4},{1,2,3,4}}

    //列印一維陣列長度
    fmt.Println(len(myArray))
    //列印二維陣列長度
fmt.Println(len(myArray[1])) //列印整個二維陣列 fmt.Println(myArray) }

for-range結構

這是Go語言一種獨有的結構,可以用來遍歷訪問陣列的元素。

for ix, value := range array01 {
    ...
}

第一個返回值 ix 是陣列的索引,第二個是在該索引位置的值;他們都是僅在 for 迴圈內部可見的區域性變數。value 只是 array01 某個索引位置的值的一個拷貝,不能用來修改 array01 該索引位置的值。例如:

package main
import "fmt"

func main() {
    var arr1 [5]int

    for i:=0; i < len(arr1); i++ {
        arr1[i] = i * 2
    }

    for i:=0; i < len(arr1); i++ {
        fmt.Printf("Array at index %d is %d\n", i, arr1[i])
    }

當然,如果你在遍歷陣列元素的時候,如果想遺棄索引id,可以直接把索引id標為下劃線_。一個求數組裡面的平均值的例子如下:

package main
import (
    "fmt"
)
func main() {
    sum := 0.0
    var avg float64
    xs := [6]float64{1, 2, 3, 4, 5, 6}
    switch len(xs) {
    case 0:
        avg = 0
    default:
        for _, v := range xs {//下劃線表示那個值捨去,即捨去下標索引
            sum += v
        }
        avg = sum / float64(len(xs))
    }
    fmt.Println(avg)
}

相關推薦

Golang入門精通Golang陣列

陣列定義 陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列(這是一種同構的資料結構);這種型別可以是任意的原始型別例如整形、字串或者自定義型別。陣列長度必須是一個常量表達式,並且必須是一個非負整數。需要強調:陣列長度也是陣列型別的一部分。 Go語

Golang入門精通Golang控制語句之for

for結構介紹 Go語言只有for迴圈這一種迴圈結構。 基本的for迴圈包含三個由分號分開的組成部分: 1.初始化語句:在第一次迴圈執行前被執行 2.迴圈條件表示式:每輪迭代開始前被求值 3.後置語句:每輪迭代後被執行 初始化語句一般是一個短變數宣告

Golang入門精通Golang控制語句之switch

基本結構 相比較 C 和 Java 等其它語言而言,Go 語言中的 switch 結構使用上更加靈活。它接受任意形式的表示式,例如: switch var1 { case val1: ... case val2:

Golang入門精通Golang函式

函式 函式是結構化程式設計中最小的模組單元,日常開發過程中,將複雜的演算法過程分解為若干個小任務(程式碼塊),使程式的結構性更清晰,程式可讀性提升,易於後期維護和讓別人讀懂你的程式碼。編寫多個函式的主要目的是將一個需要很多行程式碼的複雜問題分解為一系列簡單的任

TensorFlow 入門精通TensorFlow tf.nn.conv2d 一路追查

讀者可能還記得本系列部落格(二)和(六)中 tf.nn 模組,其中最關心的是 conv2d 這個函式。首先將部落格(二) MNIST 例程中 convolutional.py 關鍵原始碼列出: def model(data, train=False): """The

Linux小小白入門教程閱讀文字命令

以下操作在Linux終端進行。Linux因為許可權非常嚴格,所以暫時所有的命令操作全部是在/home資料夾下的/yangjw資料夾下進行。/yangjw資料夾就是登入使用者名稱所在的資料夾,出了此資料

Ansible入門Spark自動化安裝

Spark是專為大規模資料處理而設計的快速通用的計算引擎,底層是基於Scala開發。 注:以下是基於Spark的Standalone模式自動化安裝 Spark安裝包下載 到 Spark官網下載對應安裝包,本文以Spark 2.2.0版本為例。 將下載好的&

條形碼入門指南二維條形碼

   現在條形碼無處不在,幾乎用於所有業務領域的識別。在業務流程中實施條形碼時,可以自動執行程式以減少人為錯誤

Golang入門精通Golang併發程式設計之Goroutine

程序,執行緒,並行和併發 一個應用程式是執行在機器上的一個程序;程序是一個執行在自己記憶體地址空間裡的獨立執行體。一個程序由一個或多個作業系統執行緒組成,這些執行緒其實是共享同一個記憶體地址空間的一起工作的執行體。幾乎所有’正式’的程式都是多執行緒的,以便讓使

Matlab入門精通--字串操作

字串的定義 >> str='今天,是2018年11月23日, 我們班一起去上海旅遊。' 下標訪問字串 >>str(1)          今 >

Logtail入門精通工作原理簡介

摘要: Logtail資料採集原理介紹,包括檔案採集原理以及外掛採集原理。 檔案採集原理 Logtail檔案採集的流程包括:檔案監聽、檔案讀取、日誌處理、日誌過濾、日誌聚合和資料傳送6個環節。下面將分別進行介紹: • 注意:本節只介紹正常執行模式中Logtail

TensorFlow 入門精通MNIST 例程原始碼分析

按照上節步驟, TensorFlow 預設安裝在 /usr/lib/python/site-packages/tensorflow/ (也有可能是 /usr/local/lib……)下,檢視目錄結構: # tree -d -L 3 /usr/lib/pyt

CUDA入門精通流並行

前面我們沒有講程式的結構,我想有些童鞋可能迫不及待想知道CUDA程式到底是怎麼一個執行過程。好的,這一節在介紹流之前,先把CUDA程式結構簡要說一下。 CUDA程式檔案字尾為.cu,有些編譯器可能不認識這個字尾的檔案,我們可以在VS2008的Tools->Opti

TensorFlow 入門精通使用 TensorFlow 實現 RNN

使用 TensorFlow 很大的一個原因是其對 RNN/LSTM 支援較好。作為理解 RNN/LSTM 基礎,建議閱讀經典文獻:以下為程式碼。# Copyright 2015 Google Inc. All Rights Reserved. # # Licensed und

TensorFlow 入門精通安裝和使用

安裝過程 目前較為穩定的版本為 0.12,本文以此為例。其他版本請讀者自行甄別安裝步驟是否需要根據實際情況修改。 TensorFlow 支援以下幾種安裝方式: PIP 安裝 原始碼編譯安裝 Docker 映象安裝 PIP 安裝

CUDA入門精通環境搭建

NVIDIA於2006年推出CUDA(Compute Unified Devices Architecture),可以利用其推出的GPU進行通用計算,將平行計算從大型叢集擴充套件到了普通顯示卡,使得使用者只需要一臺帶有Geforce顯示卡的筆記本就能跑較大規模的並行處理程式

TensorFlow 入門精通tensorflow.nn 詳解

看過前面的例子,會發現實現深度神經網路需要使用 tensorflow.nn 這個核心模組。我們通過原始碼來一探究竟。 # Copyright 2015 Google Inc. All Rights Reserved. # # Licensed under th

ABP入門精通4使用基於JWT標準的Token訪問WebApi

專案:asp.net zero 4.2.0 .net core(1.1) 版本 我們做專案的時候可能會遇到需要提供api給app呼叫,ABP動態生成的WebApi提供了方便的基於JWT標準的Token訪問方式供我們訪問API,不用在程式碼上做任何改動,很方便有木有! 一.什麼是JWT Json web t

runtime入門精通—— 使用runtime實現字典轉模型

由於文章篇幅長度原因,筆者單獨用一篇文章來介紹使用runtime來實現字典轉模型。檢視完整的runtime在實際開發中的使用點選連結 ——> runtime從入門到精通(六)—— runtime在實際開發中的應用 字典轉模型的第一步:設計模型

Java網路程式設計入門精通27關閉服務端連線

package server;import java.net.*;class Client {     public static void main(String[] args) throws Exception     {         Socket socket = new Socket("127.