Go基礎系列 資料型別轉換 strconv包

2021-09-08 05:25:56 字數 4176 閱讀 8828

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型別,代表乙個...