iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0
Software Development

你知道Go是什麼嗎?系列 第 4

Day4 - 型態 - Golang

  • 分享至 

  • xImage
  •  

今天是第四天,從基本型態開始講吧,與大部分語言一樣有基礎的intfloatstring,在此之上Go還有complexarrayslicemapchannel等進階型態,再來都會談到。

基礎型態

整數(int)

沒特別指定類別的話,宣告會是基礎型態intunit,以電腦位元數決定是32還64

  • 無號整數
    • unit8
    • unit16
    • unit32
    • unit64
    • unit
  • 帶號整數
    • int8
    • int16
    • int32
    • int64
    • int
資料型別 下限 上限
unit8 0 255
unit16 0 65535
unit32 0 4294967295
unit64 0 18446744073709551615
unit

可以看出最大值是2^n-1

資料型別 下限 上限
int8 -128 127
int16 -32768 32767
int32 -2147483648 2147483647
int64 -9223372036854775808 9223372036854775807
int

這邊的話下限是-2^(n-1),上限是 2^(n-1)-1

浮點數(float)

有小數的數字,分為float32float64

資料型別 標準 最大值
float32 IEEE-754 32 位元 3.4e38
float64 IEEE-754 64 位元 1.8e308

IEEE二進位浮點數算術標準(IEEE 754)是20世紀80年代以來最廣泛使用的浮點數運算標準,為許多CPU與浮點運算器所採用。

布林值(bool)

分true與false,預設為false

var a bool
fmt.Println(a) // false

b := true
fmt.Println(b) // true

字串(string)

  • string
    正常狀況下使用的型別,通常不會使用其他兩種

  • rune
    一種int32的類型,一個值代表一個Unicode

  • byte
    一種unit8的類型,一個值代表一個ASCII

在大部分情形下,都是使用 string 型別,這篇文章對string與byte有很詳細的講解,想深入了解的話可以讀一下。

複數(complex)

複數包涵兩種型態 complex64complex128。有以下兩種宣告方法

c1 := complex(10, 11) // constructor init
c2 := 10 + 11i        // complex number init syntax

型別轉換

不同型別的資料有時會需要互相轉換,但直接交換有時會出錯或喪失精準度,轉換格式如下
type(變數)

// 宣告一個16位元整數,轉成8位元時發生截斷,因為8位元整數最大值是127
var a int16 = 128
fmt.Printf("%d \n", int8(a)) //-128

// 將浮點數轉成整數,會損失小數點後的精度
var b float32 = math.Pi
fmt.Printf("%d \n", int(b)) //3

相關功能

Go格式化輸出中有%T可以查看該變數型別,另外也有unsafe.Sizeof()可以觀看占用的記憶體大小,下面為簡單範例

var a int8 = 30
fmt.Printf("int8 長度= %d byte, 型態= %T", unsafe.Sizeof(a), a)
//int8 長度= 1 byte, 型態= int8

var b int32 = 30
fmt.Printf("int32 長度= %d byte, 型態= %T", unsafe.Sizeof(b), b)
//int8 長度= 4 byte, 型態= int32

參考資料

[Golang] 程式設計教學:資料型態 (Data Type):
https://opensourcedoc.com/golang-programming/data-type/

day4 - 基本型別:
https://ithelp.ithome.com.tw/articles/10214468

徹底弄清Golang中[]byte與string轉換
https://www.gushiciku.cn/pl/pDSl/zh-tw


上一篇
Day3 - 變數 - Golang
下一篇
Day5 - 函式(function)- Golang
系列文
你知道Go是什麼嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言