Go语言类型转换

Posted Go程序员开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言类型转换相关的知识,希望对你有一定的参考价值。

Go语言类型转换

类型转换用于将一种数据类型的变量转换为另外一种类型的变量。

Go语言类型转换基本格式如下:
表达式 T(v) 将值 v 转换为类型 T 。

Go语言各种类型转换及函数的高级用法:
strconv包实现了基本数据类型和其字符串表示的相互转换。

转字节

字符串转字节

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var str string = "oldboy"
    result := []byte(str)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

32位整形转字节

package main

import (
    "bytes"
    "encoding/binary"
    "fmt"
    "reflect"
)

func main() {
    var x int32
    x = 100
    bytesBuffer := bytes.NewBuffer([]byte{})
    binary.Write(bytesBuffer, binary.BigEndian, x)
    result := bytesBuffer.Bytes()
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

转字符串

字节转字符串

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var b []byte = []byte{11110810098111121}
    result := string(b)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

整形转字符串

package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    var x int
    x = 100
    result := strconv.Itoa(x)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

FormatInt 将 int 型整数 i 转换为字符串形式 
base:进位制(2 进制到 36 进制) 大于 10 进制的数,返回值使用小写字母 ‘a’ 到 ‘z’

func FormatInt(i int64, base int) string

Itoa 相当于 FormatInt(i, 10)

64位整形转字符串

package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    var i int64
    i = 0x100
    result := strconv.FormatInt(i, 10)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

布尔值转字符串

package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    := strconv.FormatBool(true)
    f := strconv.FormatBool(false)
    fmt.Printf("t is %v , t type is %v\n", t, reflect.TypeOf(t))
    fmt.Printf("f is %v , f type is %v\n", f, reflect.TypeOf(f))
}

浮点数转字符串

strconv.FormatFloat(f,fmt,prec,bitSize)
f:要转换的浮点数 
fmt:格式标记(beE、,fgG) 
prec:精度(数字部分的长度,不包括指数部分) 
bitSize:指定浮点类型(32:float32、64:float64

格式标记: 
b’ (-ddddp±ddd,二进制指数) 
e’ (-d.dddde±dd,十进制指数) 
E’ (-d.ddddE±dd,十进制指数) 
f’ (-ddd.dddd,没有指数) 
g’ (‘e’:大指数,’f’:其它情况) 
G’ (‘E’:大指数,’f’:其它情况)
package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    := 100.12345678901234567890123456789
    result := strconv.FormatFloat(f, 'e', 30, 32)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

转整形

int转int64

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var x int = 100
    result := int64(x)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

字符串转整形

package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    var str string
    str = "100"
    result, _ := strconv.Atoi(str)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

字节转32位整形

package main

import (
    "bytes"
    "encoding/binary"
    "fmt"
    "reflect"
)

func main() {
    b := []byte{0x000x000x030xe8}
    bytesBuffer := bytes.NewBuffer(b)

    var result int32
    binary.Read(bytesBuffer, binary.BigEndian, &result)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

转浮点型

float32转float64

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var x float32 = 100
    result := float64(x)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

整型转浮点型

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var x int = 100
    result := float32(x)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

字符串转浮点数

strconv.ParseFloat(str,bitSize)
str:要转换的字符串
bitSize:指定浮点类型(32:float32、64:float64
如果 str 是合法的格式,而且接近一个浮点值,
则返回浮点数的四舍五入值(依据 IEEE754 的四舍五入标准)
如果 str 不是合法的格式,则返回“语法错误”
如果转换结果超出 bitSize 范围,则返回“超出范围”
package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    var str string = "0.12345678901234567890"
    result, _ := strconv.ParseFloat(str, 32)
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

转布尔值

字符串转布尔值

ParseBool 将字符串转换为布尔值 
它接受真值:1, t, T, TRUEtrueTrue 
它接受假值:0, f, F, FALSEfalseFalse
其它任何值都返回一个错误
package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    result, _ := strconv.ParseBool("1")
    fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}

注意:Go语言不能将其他类型当 bool 值使用。

package main

func main() {
    a := 100
    if a {
    }
}

编译错误:

./main.go:5:2: non-bool a (type int) used as if condition


下一篇:

Go语言切片------敬请期待!

0基础学习Go语言系列:


看完本文有收获?那就分享给更多人吧~

长按二维码

以上是关于Go语言类型转换的主要内容,如果未能解决你的问题,请参考以下文章

Go语言类型转换

Go 语言类型转换

CGO类型转换

CGO类型转换

Go语言类型转换库github.com/demdxx/gocast的用法

Go语言中其他数据与字符串类型的转换