zoukankan      html  css  js  c++  java
  • Go语言类型转换

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

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

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

    转字节

    reflect.TypeOf() 查看类型

    字符串转字节

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

    32位整形转字节

    package main
    
    import (
        "bytes"
        "encoding/binary"
        "fmt"
        "reflect"
    )
    // reflect.TypeOf() 查看类型 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 ", result, reflect.TypeOf(result)) }

    转字符串

    字节转字符串

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    func main() {
        var b []byte = []byte{111, 108, 100, 98, 111, 121}
        result := string(b)
        fmt.Printf("result is %v , result type is %v
    ", result, reflect.TypeOf(result))
    }

    整形转字符串

     strconv.Itoa(x)

    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
    ", 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
    ", result, reflect.TypeOf(result))
    }

    布尔值转字符串

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

    浮点数转字符串

    strconv.FormatFloat(f,fmt,prec,bitSize)
    f:要转换的浮点数 
    fmt:格式标记(b、e、E、,f、g、G) 
    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() {
        f := 100.12345678901234567890123456789
        result := strconv.FormatFloat(f, 'e', 30, 32)
        fmt.Printf("result is %v , result type is %v
    ", 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
    ", result, reflect.TypeOf(result))
    }

    字节转32位整形

    package main
    
    import (
        "bytes"
        "encoding/binary"
        "fmt"
        "reflect"
    )
    
    func main() {
        b := []byte{0x00, 0x00, 0x03, 0xe8}
        bytesBuffer := bytes.NewBuffer(b)
    
        var result int32
        binary.Read(bytesBuffer, binary.BigEndian, &result)
        fmt.Printf("result is %v , result type is %v
    ", 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
    ", 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
    ", 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
    ", result, reflect.TypeOf(result))
    }

    转布尔值

    字符串转布尔值

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

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

    func main() {
        result, _ := strconv.ParseBool("1")
        fmt.Printf("result is %v , result type is %v ", 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
  • 相关阅读:
    Python3标准库:copy复制对象
    Python3标准库:weakref对象的非永久引用
    Python3标准库:queue线程安全的FIFO实现
    Python3标准库:bisect维护有序列表
    Python3标准库:struct二进制数据结构
    Python3标准库:heapq堆排序算法
    Python3标准库:array数组
    Python3标准库:collections容器数据类型
    20-如何运行容器?
    19-Docker 镜像小结
  • 原文地址:https://www.cnblogs.com/jiangchunsheng/p/10752995.html
Copyright © 2011-2022 走看看