初學 Golang 30 天 - (4)型態

Go 和你所知道的大多數語言相同,會有各種型態,如果你有學過 C 語言,這邊你可以很輕鬆的看過去,而且你會發現它跟 C 語言有許多相似之處,Go 之所以被稱為「21 世紀 C 語言不是沒有原因」,另外如果沒有學過,也別擔心,它沒有很困難,那就讓我們來認識看看有哪些型態:

數字

整數的型態很多種,以下表格是 Go 語言擁有的整數型態,以及它的範圍。
| 類型 | 位元 | 值的範圍 |
| ------------- |:-------------:| -----:|
| int8 | 1 | -128~127 |
| uint8(byte) | 1 | 0~255 |
| int16 | 2 | -32768~32767 |
| uint16 | 2 | 0~65535 |
| int32 | 4 | -2147483648~2147483647 |
| uint32 | 4 | 0~4294967295 |
| int64 | 8 | -9223372036854775808~9223372036854775807 |
| uint64 | 8 | 0~18446744073709551615 |
| int | 視平台而定 | 視平台而定 |
| uint | 視平台而定 | 視平台而定 |
| uintptr | 同指標 | 32 位元平台 4 位元,64 位元平台 8 位元 |

範例

package main

import "fmt"

func main() {
    fmt.Println("1 + 1 =", 1 + 1)
}

http://play.golang.org/p/N0XKLexlwp
#表格參考資料 Go 語言編程 2.3節 變量 人民郵電出版社

浮點數

複數包涵兩種型態 float32、float64。
與其他語言相同, Go 當然也可以用浮點數。
要注意的是,如果初始化的時候沒有加小數點會被推斷為整數,另外初始化的時候沒有指定型態的話,會被自動推斷為 float64。
float64 在 Go 語言相當於 C 語言的 Double,且 float32 與 float64 是無法一起計算的,需要強制轉型。

範例

package main

import "fmt"

func main() {
    var floatValue float64
    floatValue = 7.0
    var floatValue2 = 3.0
    fmt.Println("7.0/3.0 =", floatValue/floatValue2)
    
    var test float64
    var test2 float32
    test = 1.1
    test2 = 2.2
    fmt.Println("test + test2 = ", float32(test) + test2)
}

http://play.golang.org/p/PIB7YTp_Wb

複數

複數包涵兩種型態 complex64、complex128。
我覺得算是 Go 的特色之一,其他語言很少有這種型態,一個完整的複數需要包函實數、虛數。
如果是初始化讓 Go 自動判斷型態的型態會是 complex128,而不會是 complex64

範例

package main

import "fmt"

func main() {
    var complexValue complex64
    complexValue = 1.2 + 12i
    complexValue2 := 1.2 + 12i
    complexValue3 := complex(3.2, 12)

    fmt.Println("complexValue =", complexValue)
    fmt.Println("complexValue2 =", complexValue2)
    fmt.Println("complexValue3 =", complexValue3)
    
    fmt.Println("complexValue3 實數 =", real(complexValue3))
    fmt.Println("complexValue3 虛數 =", imag(complexValue3))
}

http://play.golang.org/p/Srm2TkMzRo

字串

請注意字串型態無法在初始化後被修改。

範例

package main

import "fmt"

func main() {
    fmt.Println("1" + "1")
    fmt.Println(len("Hello World"))
    fmt.Println("Hello World"[1])
    fmt.Println("Hello " + "World")
    
    a := "Hello World"
    fmt.Printf("%c",a[1])
}

http://play.golang.org/p/v3TYS_t8VZ

布林

Go 語言中的布林與其他語言一致,關鍵字一樣是 bool ,可欲賦予值為 true 和 false。

範例

package main

import "fmt"

func main() {
    var a bool
    a = true
    fmt.Println("a = ", a)
    
    b := false
    fmt.Println("b = ", b)
    
    fmt.Println(true && true)
    fmt.Println(true && false)
    fmt.Println(true || true)
    fmt.Println(true || false)
    fmt.Println(!true)
}

http://play.golang.org/p/8BVcSKCdJL

comments powered by Disqus