go資料型別轉換

2021-10-24 01:19:41 字數 3011 閱讀 3664

在必要以及可行的情況下,乙個型別的值可以被轉換成另一種型別的值。由於go語言不存在隱式型別轉換,因此所有的型別轉換都必須顯式的宣告:

valueoftypeb = typeb(valueoftypea)

型別轉換只能在定義正確的情況下轉換成功,例如從乙個取值範圍較小的型別轉換到乙個取值範圍較大的型別(將 int16 轉換為 int32)。當從乙個取值範圍較大的型別轉換到取值範圍較小的型別時(將 int32 轉換為 int16 或將 float32 轉換為 int),會發生精度丟失(截斷)的情況。

例項

以下例項中將整型轉化為浮點型,並計算結果,將結果賦值給浮點型變數:

var sum int = 17

var count int = 5

var mean float32

mean = float32(sum)/float32(count)

fmt.printf("mean 的值為: %fn",mean)

只有相同底層型別的變數之間可以進行相互轉換(如將 int16 型別轉換成 int32 型別),不同底層型別的變數相互轉換時會引發編譯錯誤(如將 bool 型別轉換為 int 型別)

fmt的sprintf方法也提供了一些簡單的將其他資料型別轉為string型別的操作

注意:sprintf 使用中需要注意轉換的格式 int 為%d float 為%f bool 為%t byte 為%c

var i int = 20

strs = fmt.sprintf("%d", i)

var b byte = 'a'

strs = fmt.sprintf("%c", b)

var t bool = true

strs = fmt.sprintf("%t", t)

var f float64 = 12.456

strs = fmt.sprintf("%f", f)

strconv包提供了字串與簡單資料型別之間的型別轉換功能。可以將簡單型別轉換為字串,也可以將字串轉換為其它簡單型別。

這個包裡提供了很多函式,大概分為幾類:

還有其他一些基本用不上的函式,見官方手冊:

當有些型別無法轉換時,將報錯,返回的錯誤是strconv包中自行定義的error型別。有兩種錯誤: var errrange = errors.new("value out of range") var errsyntax = errors.new("invalid syntax")

例如,使用atoi("a")將"a"轉換為int型別,自然是不成功的。如果print輸出err資訊,將顯示:

strconv.atoi: parsing "a": invalid syntax

format類函式

將給定型別格式化為string型別:formatbool()、formatfloat()、formatint()、formatuint()。

var num1 int = 20

s1 := strconv.itoa(num1)

fmt.printf("str type %t ,strs=%v \n", s1, s1)

var num2 int64 = 200

s2 := strconv.formatint(num2, 10)

fmt.printf("str type %t ,strs=%v \n", s2, s2)

/*

引數 1:要轉換的值

引數 2:格式化型別

'f'(-ddd.dddd)、

'b'(-ddddp±ddd,指數為二進位制)、

'e'(-d.dddde±dd,十進位制指數)、

'e'(-d.dddde±dd,十進位制指數)、

'g'(指數很大時用'e'格式,否則'f'格式)、

'g'(指數很大時用'e'格式,否則'f'格式)。

引數 3: 保留的小數點 -1(不對小數點格式化)

引數 4:格式化的型別

*/var num3 float64 = 20.113123

s2 := strconv.formatfloat(num2,'f',6,64)

fmt.printf("str type %t ,strs=%v \n", s2, s2)

s4 := strconv.formatbool(true)

fmt.printf("str type %t ,strs=%v \n", s4, s4)

parse類函式

parse類函式用於轉換字串為給定型別的值:parsebool()、parsefloat()、parseint()、parseuint()。

由於字串轉換為其它型別可能會失敗,所以這些函式都有兩個返回值,第乙個返回值儲存轉換後的值,第二個返回值判斷是否轉換成功。

string轉成int:

int, err := strconv.atoi(string)
string轉成int64:

int64, err := strconv.parseint(string, 10, 64)
string轉成uint64:

uint64, err := strconv.parseuint(string, 10, 64)

// 宣告乙個slice

b10 := byte("int (base 10):")

// 將轉換為10進製的string,追加到slice中

fmt.println(string(b10))

b16 := byte("int (base 16):")

fmt.println(string(b16))

參考:

go 資料型別和型別轉換

數字型別包括整型和浮點型,內建的和系統無關的數字型別包括 和系統有關的型別有 組成每個字串的元素叫做 字元 可以通過遍歷或者單個獲取字串元素獲得字元 var a 中 var b x go 語言的字元有以下兩種 uint8型別,或者叫 byte 型,代表了ascii碼的乙個字元。rune型別,代表乙個...

Go語言基礎資料型別轉換

前面給大家分享過go語言中的基本資料型別 沒有關注的可以看下歷史訊息 分別是 布林型別 整形 浮點型 複數型別 字串和字元型別 go語言是強型別語言,不能像php那樣可以自動轉換,需要顯示的進行強制轉換。這裡是引用go語言基礎資料型別之萬丈高樓平地起 數值型別之間的轉換 在進行數值型別轉化時只需要使...

go 資料型別

資料型別陣列 切片map struct 函式介面 channel 指標陣列 類似php索引陣列,長度固定,值型別唯一 func main 宣告並初始化陣列arr2,長度自動匹配 fmt.printf t arr1 fmt.printf t arr2 切片 動態陣列 func main 擷取 s3 s...