2 golang中變量的定義

個人理解的是,go裏面的變量和const修飾的常量其實是不同的概念,做了一個徹底的區分。

對變量的定義:引入了關鍵字var對變量進行聲明

var a int
var b string
var c float64
var e [4] int // 數組
var f [] int  //數組切片
var f * int    //正確
var v1 int = 5 //正確
var v2 = 5     //正確,編譯器自動推導出V2類型
v3 := 5        //正確,編譯器自動推導出V3的類型

多重賦值

Go語言提供了大多數的語言所不支持的多重賦值,使得變量的的變換變得十分簡單,多重賦值的一個例子,就是不要像c語言一樣使用中間的變量

i := 2
j := 3
i , j = i , i //交換i與j的值

變量的類型

獲取變量的大小

//使用unsafe
package main

import (
  "fmt"
  "unsafe"
)

func main(){
    var a int64 = 10000
    fmt.Println("length of a : " , unsafe.Sizeof(a))
}

布爾類型

Go語言提供內置的布爾值true和false,Go語言支持標準的邏輯比較和比較操作,但是操作結果都是布爾值。在go裏面是不允許將其他的類型轉換爲bool類型的,比如int類型。必須使用false以及true。

var f * int    //正確
var v1 int = 5 //正確
var v2 = 5     //正確,編譯器自動推導出V2類型
v3 := 5        //正確,編譯器自動推導出V3的類型

字符串

go的字符串和c裏面的不同,使用的是UTF-8的一個序列,不再是ASCII,因爲UTF-8的編碼不定長比較靈活,所以一個字符串的大小也可能是1到4個字節。Go 這樣做的好處是不僅減少了內存和硬盤空間佔用,同時也不用像其它語言那樣需要對使用 UTF-8 字符集的文本進行編碼和解碼。

t1 := "\"hello world\""
t2 := "\u5b32\u8FCE"
t2 := `"hello"`
轉義字符 含義
\\ 表示反斜線
' 單引號
" 雙引號
\n 換行符
\uhhhh 4 個 16 進制數字給定的 Unicode 字符

在 Go 語言中單個字符可以使用單引號( ' )來創建。之前的課程中,我們有學習過rune類型,它等同於int32,在 Go 語言中,一個單一的字符可以用一個單一的rune來表示。這也是容易理解的,因爲 Go 語言的字符串是 UTF-8 編碼,其底層使用 4 個字節表示,也就是 32 bit

在 Go 語言中,字符串支持切片操作,但是需要注意的是如果字符串都是由 ASCII 字符組成,那可以隨便使用切片進行操作,但是如果字符串中包含其他非 ASCII 字符,直接使用切片獲取想要的單個字符時需要十分小心,因爲對字符串直接使用切片時是通過字節進行索引的,但是非 ASCII 字符在內存中可能不是由一個字節組成。如果想對字符串中字符依次訪問,可以使用range操作符。另外獲取字符串的長度可能有兩種含義,一種是指獲取字符串的字節長度,一種是指獲取字符串的字符數量。

字符串支持以下操作:

語法 描述
s += t 將字符串 t 追加到 s 末尾
s + t 將字符串 s 和 t 級聯
s[n] 從字符串 s 中索引位置爲 n 處的原始字節
s[n:m] 從位置 n 到位置 m-1 處取得的字符(字節)串
s[n:] 從位置 n 到位置 len(s)-1 處取得的字符(字節)串
s[:m] 從位置 0 到位置 m-1 處取得的字符(字節)串
len(s) 字符串 s 中的字節數
len([]rune(s)) 字符串 s 中字符的個數,可以使用更快的方法 utf8.RuneCountInString()
[ ]rune(s) 將字符串 s 轉換爲一個 unicode 值組成的串
string(chars) chars 類型是[]rune 或者[]int32, 將之轉換爲字符串
[ ]byte(s) 無副本的將字符串 s 轉換爲一個原始的字節的切片數組,不保證轉換的字節是合法的 UTF-8 編碼字節

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章