在必要以及可行的情況下,乙個型別的值可以被轉換成另一種型別的值。由於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...