原文:Go中的各種變量類型轉換
Go中的各種變量類型轉換
從PHP轉向GO,最不能適應的是GO是強類型語言,變量的申明需要指定其類型,相同的變量之間才可以做算術、關系、邏輯等運算。
一、string類型
| int int8 int16 int32 int64 |
string轉換成這5種類型,需要先使用 strconv.ParseInt(s,10,64), 轉換成相對應的int64,然后使用強制轉換。例如: r,_ := strconv.Parseint(“123″,10,8) int8(r)func ParseInt(s string, base int, bitSize int) (i int64, err error) 返回字符串表示的整數值,接受正負號。 base指定進制(2到36),如果base為0,則會從字符串前置判斷,”0x”是16進制,”0″是8進制,否則是10進制; bitSize指定結果必須能無溢出賦值的整數類型,0、8、16、32、64 分別代表 int、int8、int16、int32、int64;返回的err是*NumErr類型的,如果語法有誤,err.Error = ErrSyntax;如果結果超出類型范圍err.Error = ErrRange。從上面的描述中,也可以得知,該方法還可以用於轉換2進制、8進制、16進制到10進制,例如: strconv.ParseInt(“1110110″,2,64),返回結果:118特殊的方法: func Atoi(s string) (i int, err error) Atoi是ParseInt(s, 10, 0)的簡寫。 |
| uint uint8 uint16 uint32 uint64 |
同上,ParseUint類似ParseInt但不接受正負號,用於無符號整型 |
| float32 float64 |
用法同上,先使用 strconv.ParseFloat(s,64),然后強制轉換成相對應的類型。func ParseFloat(s string, bitSize int) (f float64, err error) 解析一個表示浮點數的字符串並返回其值。 如果s合乎語法規則,函數會返回最為接近s表示值的一個浮點數(使用IEEE754規范舍入)。bitSize指定了期望的接收類型,32是float32(返回值可以不改變精確值的賦值給float32),64是float64;返回值err是*NumErr類型的,語法有誤的,err.Error=ErrSyntax;結果超出表示范圍的,返回值f為±Inf,err.Error= ErrRange。注意:使用float類型一定要注意其精度 |
| []byte | []byte(s) ,而從字節切片轉換成string,則使用 string(b),從這里可以看出[]byte和string可以使用強制轉換。 |
| rune | 同上,先使用 strconv.ParseInt(s,10,64),轉換成int64,然后使用強制轉換 r ,_ := strconv.ParseInt(s,10,64) rune(r) |
| bool | bool, err := strconv.ParseBool(s) 返回字符串表示的bool值。它接受1、0、t、f、T、F、true、false、True、False、TRUE、FALSE;否則返回錯誤。 |
二、bool類型
| string | r := strconv.FormatBool(s) func FormatBool(b bool) string 根據b的值返回”true”或”false”。 |
| 其他類型 | 一般情況很少將bool轉換成字符以外的類型,如果有可將bool類型轉換成string后,再進行轉換,或者采用switch的判斷邏輯,反正bool就2種值類型。 |
三、int、int8、int16、int32、int64類型
| string | 將這5種類型轉換到string類型,需要先使用強制轉換到int64,再使用strconv.FormatInt(int64(s),10)
func FormatInt(i int64, base int) string 同理:該方法也可以將這5種類型,轉換成2進制,8進制,10進制的字符串。 特殊方法: |
| uint uint8 uint16 uint32 uint64 float32 float64 |
使用強制轉換。 var s = 35 uint(s) uint8(s) |
| 其他類型 | 可轉換到string后,再進行轉換 |
四、uint、uint8、uint16、uint32、uint64類型
| string | 將這5種類型轉換到string類型,需要先使用強制轉換到uint64,再使用strconv.FormatUint(uint64(s),10)
func FormatUint(i uint64, base int) string 同理:該方法也可以將這5種類型,轉換成2進制,8進制,10進制的字符串。 |
| int int8 int16 int32 int64 float32 float64 |
使用強制轉換。 var s = 35 int(s) int8(s) float64(s) |
| 其他類型 | 可轉換到string后,再進行轉換 |
五、float32、float64類型
| string | var s = 111.123456 r := strconv.FormatFloat(float64(s),’f’,3,32)func FormatFloat(f float64, fmt byte, prec, bitSize int) string 函數將浮點數表示為字符串並返回。 bitSize表示f的來源類型(32:float32、64:float64),會據此進行舍入。 fmt表示格式:’f’(-ddd.dddd)、’b’(-ddddp±ddd,指數為二進制)、’e’(-d.dddde±dd,十進制指數)、’E’(-d.ddddE±dd,十進制指數)、’g’(指數很大時用’e’格式,否則’f’格式)、’G’(指數很大時用’E’格式,否則’f’格式)。 prec控制精度(排除指數部分):對’f’、’e’、’E’,它表示小數點后的數字個數;對’g’、’G’,它控制總的數字個數。如果prec 為-1,則代表使用最少數量的、但又必需的數字來表示f。 |
| int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 |
使用強制轉換。 var s = 35 int(s) int8(s) |
