Go數據類型之基本數據類型

不想淪爲芸芸衆生的人只需作一件事,即是對本身再也不散漫;他應當遵從良知的呼喚:「成爲你本身!」編程

                                         ---尼采安全

一、整型

有符號整數類型:int八、int1六、int32和int64app

無符號整數類型:uint八、uint1六、uint32和uint64編程語言

跟CPU平臺相關的數據類型:有符號整數int和無符號整數uint優化

特殊的無符號整數類型:uintptr(同指針),在32位平臺下4字節,在64位平臺下8字節ui

1.1 類型表示spa

int、uint和uintptr是不一樣類型的兄弟類型,int和int32也不是相同的類型,編譯器不會幫你自動作類型轉換,須要強制類型轉換。好比:指針

var apples int32 = 1code

var oranges int16 = 2blog

var compote int = apples + oranges  //compile error

當編譯時,會產生一個錯誤信息:

invalid operation: apples + oranges (mismatched types int32 and int16)

解決方法是將他們都顯式轉型爲一個常見類型:

var compote = int(apples) + int(oranges)

1.2 比較運算 

兩個不一樣類型的整數型不能直接比較,但各類類型的整型變量均可以直接與字面常量進行比較。

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

二、浮點數

如何判斷兩個浮點數是否相等?浮點數不是一種精確地表達方式,因此像整型那樣直接用 == 來判斷兩個浮點數是否相等是不可行的。應該採用下面的方法:

package main
import (
"fmt" "math" ) const MIN = 0.000001 // MIN 爲用戶自定義的比較精度 func IsEqual(f1, f2 float64) bool { return math.Dim(f1, f2) < MIN }
func main() { a :
= 0.0000123 b := 0.000012234 if IsEqual(a, b) { fmt.Println("a < b") } }

三、布爾類型

布爾值能夠和&&(AND)和||(OR)操做符結合,而且有短路行爲:若是運算符左邊值已經能夠肯定整個布爾表達式的值,那麼運算符右邊的值將再也不被求值,所以下面的表達式老是安全的:

s != "" && s[0] == 'x'

其中s[0]操做若是應用於空字符串將會致使panic異常。

四、常量

常量表達式值在編譯時期計算,而不是在運行時期。

全部常量的運算均可以在編譯期完成,這樣能夠減小運行時的工做,也方便其餘編譯優化。當操做數是常量時,一些運行時的錯誤也能夠在編譯時被發現,例如整數除零、字符串索引越界、任何致使無效浮點數的操做等。

4.1 iota常量生成器

常量聲明可使用iota常量生成器初始化,它用於生成一組以類似規則初始化的常量,可是不用每行都寫一遍初始化表達式。在一個const聲明語句中,在第一個聲明的常量所在的行,iota將會被置爲0,而後在每個有常量聲明的行加一。

下面是來自time包的例子,它首先定義了一個Weekday命名類型,而後爲一週的天天定義了一個常量,從週日0開始。在其它編程語言中,這種類型通常被稱爲枚舉類型。

type Weekday int const ( Sunday Weekday = iota Monday Tuesday Wednesday Thursday Friday Saturday )

 五、字符串

在Go語言中,字符串也是一種基本類型。

字符串鏈接:x + y; "Hello" + "123",結果爲"Hello123"

字符串長度:len(s)

相關文章
相關標籤/搜索