《Golang 入門系列五》golang的常量、變數、數組

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

前言:本文主要介紹常量和變數的使用,以及關於變數的可見度規則、參考型別和實值型別的區別。

 

一、常量

常量運算式的值在編譯期計算,而不是在運行期。常量的值不可修改,這樣可以防止在運行期被意外或惡意的修改。

1.1  常量的聲明

常量的定義格式:

const identifier [type] = value

顯式定義常量:

const a string = "Tom"

隱式定義常量:(這裡用了類型推導)

const a = "Tom"

多個相同類型常量定義:

const first_name, last_name = "T", "om"

樣本:

package mainimport ("fmt")const first_name, last_name = "T", "om"func main() {fmt.Printf("My name is :%s%s",first_name,last_name)}

運行結果:

My name is :Tom

1.2  常量運算式的繼承

樣本:

package mainimport ("fmt")const (a = iotabc = iotade)const (f = iota)func main() {fmt.Printf("a = %d\nb = %d\nc = %d\nd = %d\ne = %d\nf = %d",a,b,c,d,e,f)}

結果:

a = 0b = 1c = 2d = 3e = 4f = 0

二、變數

變數是有明確類型的。編譯器會檢查函數調用中,變數類型的正確性。

2.1  變數的聲明

變數聲明的運算式:

var 變數名字 類型 = 運算式

常規變數聲明:

var Name stringName = "Tom"

變數的類型推導:

var Age = 27

變數的省略調用:

Sex := "男"

2.2  多變數的聲明

樣本:

package mainimport "fmt"var Name string//多個變數的聲明var Job,Mail  = "DBA","1234568@qq.com"var (Son_Name = "HB"Son_Age = 1Son_sex = "男")func main() {Name = "Tom"var Age = 27Sex := "男"fmt.Printf("My name is %s;My age is %d;My sex is %v;My job is %v;My e-mail is %v\n",Name,Age,Sex,Job,Mail)fmt.Printf("My son name is %s;My son age is %d;My son sex is %v",Son_Name,Son_Age,Son_sex)}

結果:

My name is Tom;My age is 27;My sex is 男;My job is DBA;My e-mail is 1234568@qq.comMy son name is HB;My son age is 1;My son sex is 男

2.3  變數的生命週期

變數的生命週期指的是在程式運行期間變數有效存在的時間間隔。

包變數(全域變數):對於包變數來說,它們的生命週期和整個程式的運行周期是一致的,一個全域變數可以聲明後在整個程式中使用。

局部變數:在函數或塊中聲明的變數,它們只能由在函數或代碼塊中的語句使用。局部變數對於它們自己以外的函數是未知的。函數的參數變數和傳回值變數都是局部變數。它們在函數每次被調用的時候建立。

樣本:

package mainimport "fmt"var Name = "Tom"func main() {Name = "tom"fmt.Printf("My name is %s",Name)}

結果:

My name is tom

在程式中,局部變數和全域變數的名稱可以相同,但函數內部的局部變數的值將優先(也就是說局部變數會覆蓋全域變數)。

三、數組

數組是一個具有相同資料類型的元素組成的固定長度的有序集合。同類型的兩個數組([5]string和[10]string是兩個完全不同的數組)支援"=="和"!="比較,但是不能比較大小。數組元素可以通過索引(位置)來讀取(或者修改),索引從0開始,第一個元素索引為 0,第二個索引為 1,以此類推。

一維數組的聲明方式:

var variable_name [SIZE] variable_type

多維陣列的聲明方式:

var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type

樣本:

package mainimport "fmt"func shuzu(x [5]int) {var i,j intfor i = 0; i < 5; i++ {x[i] = x[i] +10}for j = 0; j < 5; j++ {fmt.Printf("數組傳參:Element[%d] = %d\n", j, x[j] )}}func main() {//一維數組m := [5]int{3,4,5,6,7}n := [5]int{3,4,5,6,7}fmt.Printf("數組比較:m = n is %v\n\n",m == n)shuzu(m)var a [10]intvar i,j intfor i=0;i < 10 ; i++ {a[i] = i+10}for j = 0; j < 10; j++ {fmt.Printf("數組賦值:Element[%d] = %d\n", j, a[j] )}//一個三行四列的二維數組b := [3][4]int{{0, 1, 2, 3} , {1, 2, 3, 4} , {2, 3, 4, 5}}for i = 0; i < 3; i++ {for j = 0; j < 4; j++ {fmt.Printf("多維陣列:b[%d][%d] = %d\n",i,j,b[i][j])}}}

結果:

數組比較:m = n is true數組傳參:Element[0] = 13數組傳參:Element[1] = 14數組傳參:Element[2] = 15數組傳參:Element[3] = 16數組傳參:Element[4] = 17數組賦值:Element[0] = 10數組賦值:Element[1] = 11數組賦值:Element[2] = 12數組賦值:Element[3] = 13數組賦值:Element[4] = 14數組賦值:Element[5] = 15數組賦值:Element[6] = 16數組賦值:Element[7] = 17數組賦值:Element[8] = 18數組賦值:Element[9] = 19多維陣列:b[0][0] = 0多維陣列:b[0][1] = 1多維陣列:b[0][2] = 2多維陣列:b[0][3] = 3多維陣列:b[1][0] = 1多維陣列:b[1][1] = 2多維陣列:b[1][2] = 3多維陣列:b[1][3] = 4多維陣列:b[2][0] = 2多維陣列:b[2][1] = 3多維陣列:b[2][2] = 4多維陣列:b[2][3] = 5

為了方便大家交流,本人開通了公眾號(關注看更多精彩)和QQ群,QQ群1(291519319)和QQ群2(659336691)。喜歡技術的一起來交流吧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.