Golang 的資料型別一覽

閱讀時間約 10 分鐘


raw-image

👨‍💻簡介

Go 語言有各種資料型別,分為基本型別和複合型別。基本型別包括:

  • 整數、浮點數、布林值、字串

複合型別包括:

  • 陣列、片段、結構、函式、對映、通道、介面 等。

整數型別

整數型別有許多種,像是 int8、int16、int32、int64。我們可以依據實際需求選擇。

你甚至可以使用 int 關鍵字,它會依據不同作業系統自動選擇大小:

  • 在 32 位作業系統:int 會變成 int32
  • 在 64 位作業系統:int 會變成 int64

但是,別忘了,數字型別還有其範圍和特點。


可以通過 unsafe.Sizeof 來查看不同長度的整數,在記憶體中的儲存空間。
var num2 = 12 fmt.Println(unsafe.Sizeof(num2))

轉換型別

要進行型別轉換,只需在變數前面指定目標型別即可。

var a1 int16 = 10
var a2 int32 = 12
var a3 = int32(a1) + a2
fmt.Println(a3)

但當高位轉低位時,可能會有精度損失。例如,從 16 位轉為 8 位,可能會有數據丟失。

var n1 int16 = 130
fmt.Println(int8(n1)) // 變成 -126

數值字面量(literal)

自 Go 1.13 版本起,你可以使用數值字面量語法,以二進制、八進制或十六進制格式來定義數字:

v := 0b00101101  // 代表二進制的101101
v := 0o377 // 代表八進制的377

進制轉換

你可以透過不同進制來表示數字,例如:

var number = 17
fmt.Printf("原樣輸出:%v\n", number)
fmt.Printf("十進制輸出:%d\n", number)
fmt.Printf("八進制輸出:%o\n", number)
fmt.Printf("二進制輸出:%b\n", number)
fmt.Printf("十六進制輸出:%x\n", number)

浮點數型別

Go 語言支援兩種浮點數型別:float32 和 float64。這兩種浮點數遵循 IEEE754 標準:

  • float32 的最大範圍約為 3.4e38,你可以使用常數 math.MaxFloat32 來表示。
  • float64 的最大範圍約為 1.8e308,你可以使用常數 math.MaxFloat64 來表示。

打印浮點數時,可以使用 fmt 套件的 %f 來控制小數點位數:

var pi = math.Pi
fmt.Printf("預設小數點後6位:%f\n", pi)
fmt.Printf("小數點後保留2位:%.2f\n", pi)

浮點數精度問題

幾乎所有程式語言都會有精度損失的問題,這在計算機科學中是常見的問題。例如:

d := 1129.6
fmt.Println(d * 100) // 輸出 112959.99999999

如果需要高精度計算,可以考慮使用第三方套件來解決,例如:

shopspring/decimal: 在 Go 中實現的任意精度固定小數點數字 (github.com)

布林型別

定義布林型別很簡單:

var fl = false
if fl {
fmt.Println("true")
} else {
fmt.Println("false")
}

字串型別

在 Go 語言中,字串是原生資料型別,與其他型別一樣使用。Go 語言內部使用 UTF-8 編碼來表示字串。你可以在雙引號(”)中放置內容來表示字串,甚至可以在程式碼中添加非 ASCII 字元。

s1 := "hello"
s2 := "你好"

如果想要定義多行字串,可以使用反引號:

var str = `這是第一行
這是第二行`
fmt.Println(str)

字串還支援許多常見的操作,例如計算長度、串接、分割、判斷是否包含、前綴和後綴判斷、尋找子字串位置等。

字串常見操作

  • len(str):計算長度
  • + 或 fmt.Sprintf:串接字串
  • strings.Split:分割字串
  • strings.Contains:判斷是否包含
  • strings.HasPrefix,strings.HasSuffix:前綴/後綴判斷
  • strings.Index(),strings.LastIndex():子字串出現的位置
  • strings.Join():合併操作
  • strings.Index():判斷在字串中的位置

byte 和 rune 型別

構成每個字串的元素稱為「字符」,可以通過遍歷字串元素獲取字符。字符使用單引號 ’’ 包裹起來。

Go語言中的字符有以下兩種型別:

  • uint8型別:也叫byte型,代表了ACII碼的一個字符
  • rune型別:代表一個UTF-8字符

當需要處理中文、日文或其他複合字符時,就需要使用rune型別。rune型別實際上是一個int32。

Go使用了特殊的rune型別來處理Unicode,讓基於Unicode的文本處理更加方便。也可以使用byte型進行默認字串處理,性能和擴展性都得到考慮。

需要注意的是,在Go語言中,一個漢字佔用3個位元組(UTF-8編碼),一個字母佔用1個位元組。

package main
import "fmt"

func main() {
var a byte = 'a'

fmt.Println(a) // 輸出ASCII碼值,直接輸出byte(字符)時,顯示字符對應的碼值
fmt.Printf("%c", a) // 輸出字符 'a'
s := "你好 golang"
for i := 0; i < len(s); i++ {
fmt.Printf("%v(%c)\t", s[i], s[i]) // 使用 len 循環輸出 ASCII 碼
}

for index, v := range s {
fmt.Println(index, v) // 通過rune打印UTF-8字符
}
}

修改字串

要修改字串,需要先將其轉換成[]rune 或 []byte型別,完成後再轉換成string型別。無論哪種轉換都會重新分配內存,並複製位元組陣列。

轉換為[]byte型別

s1 := "big"
byteS1 := []byte(s1)
byteS1[0] = 'p'
fmt.Println(string(byteS1))

轉換為rune型別

s2 := "你好golang"
byteS2 := []rune(s2)
byteS2[0] = '我'
fmt.Println(string(byteS2))

基本型別轉換

數值型別轉換

// 整數和浮點數之間的轉換
var aa int8 = 20
var bb int16 = 40
fmt.Println(int16(aa) + bb)

// 建議從整數轉換為浮點數
var cc int8 = 20
var dd float32 = 40
fmt.Println(float32(cc) + dd)

建議從低位轉換為高位,這樣可以避免丟失精度。

轉換為字串型別

轉換為字串型別有兩種方法,一是使用 fmt.Sprintf(),二是使用 strconv 套件的函式。

使用 fmt.Sprintf():

// 字串型別轉換
var i int = 20
var f float64 = 12.456
var t bool = true
var b byte = 'a'
str1 := fmt.Sprintf("%d", i)
fmt.Printf("類型:%v-%T \n", str1, str1)
str2 := fmt.Sprintf("%f", f)
fmt.Printf("類型:%v-%T \n", str2, str2)
str3 := fmt.Sprintf("%t", t)
fmt.Printf("類型:%v-%T \n", str3, str3)
str4 := fmt.Sprintf("%c", b)
fmt.Printf("類型:%v-%T \n", str4, str4)

使用 strconv 套件的函式:

// 將int型別轉換為str型別
var num1 int64 = 20
s1 := strconv.FormatInt(num1, 10)
fmt.Printf("轉換:%v - %T", s1, s1)

// 將float型別轉換為string型別
var num2 float64 = 3.1415926
/* 參數1:要轉換的值 參數2:格式化型別 'f'表示float,'b'表示二進制,'e'表示十進制 參數3:表示保留的小數點,-1表示不格式化小數點 參數4:格式化的型別,傳入64位或32位 */
s2 := strconv.FormatFloat(num2, 'f', -1, 64)
fmt.Printf("轉換:%v-%T", s2, s2)

字串轉換為數值型別

將字串轉換為數值型別也很容易,使用 strconv 套件即可:

str := "10"
// 第一個參數:需要轉換的數值,第二個參數:進制,參數三:32位或64位
num,_ = strconv.ParseInt(str, 10, 64)

// 轉換為float型別
str2 := "3.141592654"
num,_ = strconv.ParseFloat(str2, 10)

記得檢查轉換錯誤(例如無效的字串格式),這就是 _ 的作用。

📚Reference

avatar-img
17會員
83內容數
golang
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Alan的開發者天地 的其他內容
👨‍💻簡介 在 Golang 中,你可以使用不同的方式來宣告變數和常數。宣告變數時,可以直接指定值,或者使用型別推導,更簡單地用 := 來宣告局部變數。另外,還可以一次宣告多個變數,相同型別的變數可以一起宣告,或者使用括號宣告不同型別的變數。常數則使用 const 關鍵字宣告,確保值不變
👨‍💻簡介 在這篇文章裡,會簡單介紹幾個關鍵的基本概念和語法結構,加快上手這門程式語言。
👨‍💻如何在go中驗證SSL憑證 因之前玩過監控證書,最近在接觸golang因此來看看有甚麼方法能夠取得憑證到期日,最後發現有crypto/tls這個module可以用,驗證步驟簡單三步如下
👨‍💻簡介 在 Golang 中,你可以使用不同的方式來宣告變數和常數。宣告變數時,可以直接指定值,或者使用型別推導,更簡單地用 := 來宣告局部變數。另外,還可以一次宣告多個變數,相同型別的變數可以一起宣告,或者使用括號宣告不同型別的變數。常數則使用 const 關鍵字宣告,確保值不變
👨‍💻簡介 在這篇文章裡,會簡單介紹幾個關鍵的基本概念和語法結構,加快上手這門程式語言。
👨‍💻如何在go中驗證SSL憑證 因之前玩過監控證書,最近在接觸golang因此來看看有甚麼方法能夠取得憑證到期日,最後發現有crypto/tls這個module可以用,驗證步驟簡單三步如下
你可能也想看
Google News 追蹤
Thumbnail
我們在上一篇簡單介紹了 int(整數)是做什麼用的,接下來要介紹常和他一起出現的好朋友 float 浮點數 跟 str 字串。 float 浮點數: 函數的式子寫做 float( ) ,浮點數就是帶有小數點的資料型別,他可以將字串或是數字轉換為有小數點的狀態。前提是字串內的字符必須是數字的格
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
Thumbnail
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
Thumbnail
本章節的目的是介紹 Kotlin 的各種資料型別。包括內建型別如基本數值型別、字串型別和布林型別等,以及如何進行型別轉換。此外,也介紹了如何定義自訂型別(類)和元組型別,以及 Kotlin 提供的集合型別,例如列表(List)、集合(Set)和映射(Map)以及陣列(Array)。
Thumbnail
此章節旨在介紹Swift程式語言中的基本資料型別,包括整數、浮點數、布林型別、字串、字符、選擇型、型別轉換、自訂型別(包括類、結構和枚舉)、元組型別、集合型別、陣列型別和字典型別。每種型別的說明都包含了程式碼範例,以便讀者更好地理解其應用和使用方式。
Thumbnail
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
我們在上一篇簡單介紹了 int(整數)是做什麼用的,接下來要介紹常和他一起出現的好朋友 float 浮點數 跟 str 字串。 float 浮點數: 函數的式子寫做 float( ) ,浮點數就是帶有小數點的資料型別,他可以將字串或是數字轉換為有小數點的狀態。前提是字串內的字符必須是數字的格
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
Thumbnail
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
Thumbnail
本章節的目的是介紹 Kotlin 的各種資料型別。包括內建型別如基本數值型別、字串型別和布林型別等,以及如何進行型別轉換。此外,也介紹了如何定義自訂型別(類)和元組型別,以及 Kotlin 提供的集合型別,例如列表(List)、集合(Set)和映射(Map)以及陣列(Array)。
Thumbnail
此章節旨在介紹Swift程式語言中的基本資料型別,包括整數、浮點數、布林型別、字串、字符、選擇型、型別轉換、自訂型別(包括類、結構和枚舉)、元組型別、集合型別、陣列型別和字典型別。每種型別的說明都包含了程式碼範例,以便讀者更好地理解其應用和使用方式。
Thumbnail
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。