go不會對資料進行隱式的型別轉換,只能手動去執行轉換操作。
轉換資料型別的方式很簡單。
valueoftypeb = typeb(valueoftypea)
例如:
// 浮點數
a := 5.0
// 轉換為int型別
b := int(a)
go允許在底層結構相同的兩個型別之間互轉。例如:
// it型別的底層是int型別
type it int
// a的型別為it,底層是int
var a it = 5
// 將a(it)轉換為int,b現在是int型別
b := int(5)
// 將b(int)轉換為it,c現在是it型別
c := it(b)
但注意:
不是所有資料型別都能轉換的,例如字母格式的string型別"abcd"轉換為int肯定會失敗
低精度轉換為高精度時是安全的,高精度的值轉換為低精度時會丟失精度。例如int32轉換為int16,float32轉換為int
這種簡單的轉換方式不能對int(float)和string進行互轉,要跨大型別轉換,可以使用strconv
包提供的函式
strconv包提供了簡單資料型別之間的型別轉換功能。可以將簡單型別轉換為字串,也可以將字串轉換為其它簡單型別。
這個包裡提供了很多函式,大概分為幾類:
還有其他一些基本用不上的函式,見官方手冊:go doc 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
最常見的是字串和int之間的轉換:
1.int轉換為字串:itoa()
// itoa(): int -> string
println("a" + strconv.itoa(32)) // a32
2.string轉換為int:atoi()
func atoi(s string) (int, error)
由於string可能無法轉換為int,所以這個函式有兩個返回值:第乙個返回值是轉換成int的值,第二個返回值判斷是否轉換成功。
// atoi(): string -> int
i,_ := strconv.atoi("3")
println(3 + i) // 6
// atoi()轉換失敗
i,err := strconv.atoi("a")
if err != nil
parse類函式用於轉換字串為給定型別的值:parsebool()、parsefloat()、parseint()、parseuint()。
由於字串轉換為其它型別可能會失敗,所以這些函式都有兩個返回值,第乙個返回值儲存轉換後的值,第二個返回值判斷是否轉換成功。
b, err := strconv.parsebool("true")
f, err := strconv.parsefloat("3.1415", 64)
i, err := strconv.parseint("-42", 10, 64)
u, err := strconv.parseuint("42", 10, 64)
parsefloat()只能接收float64型別的浮點數。
parseint()和parseuint()有3個引數:
func parseint(s string, base int, bitsize int) (i int64, err error)
func parseuint(s string, base int, bitsize int) (uint64, error)
bitsize
引數表示轉換為什麼位的int/uint,有效值為0、8、16、32、64。當bitsize=0的時候,表示轉換為int或uint型別。例如bitsize=8表示轉換後的值的型別為int8或uint8。
base
引數表示以什麼進製的方式去解析給定的字串,有效值為0、2-36。當base=0的時候,表示根據string的字首來判斷以什麼進製去解析:0x
開頭的以16進製制的方式去解析,0
開頭的以8進製方式去解析,其它的以10進製方式解析。
以10進製方式解析"-42",儲存為int64型別:
i, _ := strconv.parseint("-42", 10, 64)
以5進製方式解析"23",儲存為int64型別:
i, _ := strconv.parseint("23", 5, 64)
println(i) // 13
因為5進製的時候,23表示進製了2次,再加3,所以對應的十進位制數為5*2+3=13
。
以16進製制解析23,儲存為int64型別:
i, _ := strconv.parseint("23", 16, 64)
println(i) // 35
因為16進製制的時候,23表示進製了2次,再加3,所以對應的十進位制數為16*2+3=35
。
以15進製解析23,儲存為int64型別:
i, _ := strconv.parseint("23", 15, 64)
println(i) // 33
因為15進製的時候,23表示進製了2次,再加3,所以對應的十進位制數為15*2+3=33
。
將給定型別格式化為string型別:formatbool()、formatfloat()、formatint()、formatuint()。
s := strconv.formatbool(true)
s := strconv.formatfloat(3.1415, 'e', -1, 64)
s := strconv.formatint(-42, 16)
s := strconv.formatuint(42, 16)
formatint()和formatuint()有兩個引數:
func formatint(i int64, base int) string
func formatuint(i uint64, base int) string
第二個引數base指定將第乙個引數轉換為多少進製,有效值為2<=base<=36
。當指定的進製位大於10的時候,超出10的數值以a-z字母表示。例如16進製制時,10-15的數字分別使用a-f表示,17進製時,10-16的數值分別使用a-g表示。
例如:formatint(-42, 16)
表示將-42轉換為16進製制數,轉換的結果為-2a。
formatfloat()引數眾多:
func formatfloat(f float64, fmt byte, prec, bitsize int) string
bitsize引數表示轉換為多少位(32或64)的浮點數對應的字串。
package main
import (
"fmt"
"strconv"
)func main()
輸出結果:
int (base 10):-42
int (base 16):-2a
Go語言基礎資料型別轉換
前面給大家分享過go語言中的基本資料型別 沒有關注的可以看下歷史訊息 分別是 布林型別 整形 浮點型 複數型別 字串和字元型別 go語言是強型別語言,不能像php那樣可以自動轉換,需要顯示的進行強制轉換。這裡是引用go語言基礎資料型別之萬丈高樓平地起 數值型別之間的轉換 在進行數值型別轉化時只需要使...
go資料型別轉換
在必要以及可行的情況下,乙個型別的值可以被轉換成另一種型別的值。由於go語言不存在隱式型別轉換,因此所有的型別轉換都必須顯式的宣告 valueoftypeb typeb valueoftypea 型別轉換只能在定義正確的情況下轉換成功,例如從乙個取值範圍較小的型別轉換到乙個取值範圍較大的型別 將 i...
go 資料型別和型別轉換
數字型別包括整型和浮點型,內建的和系統無關的數字型別包括 和系統有關的型別有 組成每個字串的元素叫做 字元 可以通過遍歷或者單個獲取字串元素獲得字元 var a 中 var b x go 語言的字元有以下兩種 uint8型別,或者叫 byte 型,代表了ascii碼的乙個字元。rune型別,代表乙個...