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


不想淪為芸芸眾生的人只需做一件事,便是對自己不再散漫;他應當聽從良知的呼喚:“成為你自己!”

                                         ---尼采

1、整型

有符號整數類型:int8、int16、int32和int64

無符號整數類型:uint8、uint16、uint32和uint64

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

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

1.1 類型表示

int、uint和uintptr是不同類型的兄弟類型,int和int32也不是相同的類型,編譯器不會幫你自動做類型轉換,需要強制類型轉換。比如:

var apples int32 = 1

var oranges int16 = 2

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.") }

2、浮點數

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

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") } }

3、布爾類型

布爾值可以和&&(AND)和||(OR)操作符結合,並且有短路行為:如果運算符左邊值已經可以確定整個布爾表達式的值,那么運算符右邊的值將不再被求值,因此下面的表達式總是安全的:

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

其中s[0]操作如果應用於空字符串將會導致panic異常。

4、常量

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

所有常量的運算都可以在編譯期完成,這樣可以減少運行時的工作,也方便其他編譯優化。當操作數是常量時,一些運行時的錯誤也可以在編譯時被發現,例如整數除零、字符串索引越界、任何導致無效浮點數的操作等。

4.1 iota常量生成器

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

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

type Weekday int

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

 5、字符串

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

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

字符串長度:len(s)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM