【GO】GO語言學習筆記二

來源:互聯網
上載者:User

標籤:條件   port   小數點   方式   筆記二   指標   字串   通過   條件判斷語句   

基本類型:

布爾型:boolean

整型:int8,byte,int16,int,uint,uintptr等

浮點型:float32,float64

複數類型:complex64,complex128

字串型:string

字元型:rune

錯誤類型:error

複合類型:

指標:pointer

數組:array

切片:slice

字典:map

通道:chan

結構體:struct

介面:interface

1、布爾型,與其他語言中的布爾型一樣

2、整型:

a、類型表示

需要注意的是,int和int32在Go語言裡被認為是兩種不同的類型,編譯器也不會幫你自動 做類型轉換,比如以下的例子會有編譯錯誤:
var value2 int32
value1 := 64 // value1將會被自動推導為int類型 value2 = value1 // 編譯錯誤

編譯錯誤類似於:
cannot use value1 (type int) as type int32 in assignment。 使用強制類型轉換可以解決這個編譯錯誤:
value2 = int32(value1) // 編譯通過 當然,開發人員在做強制類型轉換時,需要注意資料長度被截短而發生的資料精度損失(比如
將浮點數強制轉為整數)和值溢出(值超過轉換的目標類型的值範圍時)問題。

b、數值運算

Go語言支援下面的常規整數運算:+、?、*、/和%。加減乘除就不詳細解釋了,需要說下的 是,% 和在C語言中一樣是求餘運算,比如:

5%3 // 結果為:2 

c、比較運算

Go語言支援以下的幾種比較子:>、<、==、>=、<=和!=。這一點與大多數其他語言相 同,與C語言完全一致。

  下面為條件判斷語句的例子:
i, j := 1, 2 if i == j {        fmt.Println("i and j are equal.")    }

兩個不同類型的整型數不能直接比較,比如int8類型的數和int類型的數不能直接比較,但
各種類型的整型變數都可以直接與字面常量(literal)進行比較,比如:

var i int32var j int64i, j = 1, 2if i==j{ // 編譯錯誤 fmt.Println("i and j are equal.")}if i==1||j==2{// 編譯通過 fmt.Println("i and j are equal.")}

d、位元運算

Go語言的大多數位元運算符與C語言都比較類似,除了取反在C語言中是~x,而在Go語言中 是^x。

3、浮點型:

浮點型用於表示包含小數點的資料,比如1.234就是一個浮點型資料。Go語言中的浮點類型 採用IEEE-754標準的表達方式。
a、 浮點數表示
Go語言定義了兩個類型float32和float64,其中float32等價於C語言的float類型, float64等價於C語言的double類型。
在Go語言裡,定義一個浮點數變數的代碼如下:

var fvalue1 float32fvalue1 = 12fvalue2 := 12.0 // 如果不加小數點,fvalue2會被推導為整型而不是浮點型

對於以上例子中類型被自動推導的fvalue2,需要注意的是其類型將被自動設為float64, 而不管賦給它的數字是否是用32位長度表示的。因此,對於以上的例子,下面的賦值將導致編譯 錯誤:
fvalue1 = fvalue2
而必須使用這樣的強制類型轉換:
fvalue1 = float32(fvalue2)

b、浮點數比較
因為浮點數不是一種精確的表達方式,所以像整型那樣直接用==來判斷兩個浮點數是否相等 是不可行的,這可能會導致不穩定的結果。
下面是一種推薦的替代方案:

import "math"// p為使用者自訂的比較精度,比如0.00001 
func IsEqual(f1, f2, p float64) bool {  return math.Fdim(f1, f2) < p
}

4、複數類型:

複數實際上由兩個實數(在電腦中用浮點數表示)構成,一個表示實部(real),一個表示 虛部(imag)。如果瞭解了數學上的複數是怎麼回事,那麼Go語言的複數就非常容易理解了。

a、複數表示 複數表示的樣本如下: 

var value1 complex64value1 = 3.2 + 12i  // 由2個float32構成的複數類型  value2 := 3.2 + 12i   // value2是complex128類型value3 := complex(3.2, 12)  // value3結果同 value2

b、實部與虛部
對於一個複數z = complex(x, y),就可以通過Go語言內建函數real(z)獲得該複數的實 部,也就是x,通過imag(z)獲得該複數的虛部,也就是y。
更多關於複數的函數,請查閱math/cmplx標準庫的文檔。

5、字串:

Go語言中字串的聲明和初始化非常簡單,舉例如下:

var str string // 聲明一個字串變數str = "Hello world" // 字串賦值ch := str[0] // 取字串的第一個字元fmt.Printf("The length of \"%s\" is %d \n", str, len(str)) fmt.Printf("The first character of \"%s\" is %c.\n", str, ch)輸出結果為:    The length of "Hello world" is 11    The first character of "Hello world" is H.

字串的內容可以用類似於數組下標的方式擷取,但與數組不同,字串的內容不能在初始 化後被修改,比如以下的例子:
str := "Hello world" // 字串也支援聲明時進行初始化的做法

str[0] = ‘X‘ // 編譯錯誤
編譯器會報類似如下的錯誤:

cannot assign to str[0]

a、字串操作

平時常用的字串操作如表2-3所示。

更多的字串操作,請參考標準庫strings包。

b、字串遍曆

Go語言支援兩種方式遍曆字串。一種是以位元組數組的方式遍曆:

str := "Hello,世界"n := len(str)for i := 0; i < n; i++ {ch := str[i] // 依據下標取字串中的字元,類型為byte        fmt.Println(i, ch)}

另一種是以Unicode字元遍曆:

str := "Hello,世界"for i, ch := range str {fmt.Println(i, ch)//ch的類型為rune }

以Unicode字元方式遍曆時,每個字元的類型是rune(早期的Go語言用int類型表示Unicode 字元),而不是byte。

6、字元類型:

在Go語言中支援兩個字元類型,一個是byte(實際上是uint8的別名),代表UTF-8字串的單個位元組的值;另一個是rune,代表單個Unicode字元。 關於rune相關的操作,可查閱Go標準庫的unicode包。另外unicode/utf8包也提供了
UTF8和Unicode之間的轉換。 出於簡化語言的考慮,Go語言的多數API都假設字串為UTF-8編碼。儘管Unicode字元在標準庫中有支援,但實際上較少使用。

 

未完待續。。。

  

  

  

  

  

  

 

  

  

 

【GO】GO語言學習筆記二

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.