跳转至

基本数据类型转换

Golang 数据类型转换

Golang中基本数据类型的转换

  • Golang 在不同类型的变量之间赋值时需要显示转换
  • 基本语法为表达式 T(v) ,将值 v 转换为类型 T
  • T:数据类型,比如 int32、int64、float32...
  • v:变量的值
import (
    "fmt"
)

func main() {

    var i int32 = 100
    //希望将 i => float
    var n1 float32 = float32(i)
    var n2 int8 = int8(i)
    var n3 int64 = int64(i) //低精度->高精度

    fmt.Printf("i=%v n1=%v n2=%v n3=%v \n", i, n1, n2, n3)

    //被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化
    fmt.Printf("i type is %T\n", i) // int32

    //在转换中,比如将 int64  转成 int8 【-128---127】 ,编译时不会报错,
    //只是转换的结果是按溢出处理,和我们希望的结果不一样
    var num1 int64 = 999999
    var num2 int8 = int8(num1) 
    fmt.Println("num2=", num2)
    // 999999 转换为二进制为 11110100001000111111 截取后8位 00111111 转为十进制 63
}

基本类型转换为字符串类型

package main
import (
    "fmt"
    _ "unsafe"
    "strconv"
)

//演示golang中基本数据练习转成string使用
func main() {

    var num1 int = 99
    var num2 float64 = 23.456
    var b bool = true
    var myChar byte = 'h'
    var str string //空的str

    //使用第一种方式来转换 fmt.Sprintf方法

    str = fmt.Sprintf("%d", num1)
    fmt.Printf("str type %T str=%q\n", str, str)

    str = fmt.Sprintf("%f", num2)
    fmt.Printf("str type %T str=%q\n", str, str)

    str = fmt.Sprintf("%t", b)
    fmt.Printf("str type %T str=%q\n", str, str)

    str = fmt.Sprintf("%c", myChar)
    fmt.Printf("str type %T str=%q\n", str, str)

    //第二种方式 strconv 函数 
    var num3 int = 99
    var num4 float64 = 23.456
    var b2 bool = true

    str = strconv.FormatInt(int64(num3), 10)
    fmt.Printf("str type %T str=%q\n", str, str)

    // strconv.FormatFloat(num4, 'f', 10, 64)
    // 说明: 'f' 格式 10:表示小数位保留10位 64 :表示这个小数是float64
    str = strconv.FormatFloat(num4, 'f', 10, 64)
    fmt.Printf("str type %T str=%q\n", str, str)

    str = strconv.FormatBool(b2)
    fmt.Printf("str type %T str=%q\n", str, str)

    //strconv包中有一个函数Itoa
    var num5 int64 = 4567
    str = strconv.Itoa(int(num5))
    fmt.Printf("str type %T str=%q\n", str, str)

}

字符串类型转基本类型

package main
import (
    "fmt"
    "strconv"
)

//演示golang中string转成基本数据类型
func main() {

    var str string = "true"
    var b bool
    // b, _ = strconv.ParseBool(str)
    // 说明
    // 1. strconv.ParseBool(str) 函数会返回两个值 (value bool, err error)
    // 2. 因为我只想获取到 value bool ,不想获取 err 所以我使用_忽略
    b , _ = strconv.ParseBool(str)
    fmt.Printf("b type %T  b=%v\n", b, b)

    var str2 string = "1234590"
    var n1 int64
    var n2 int
    n1, _ = strconv.ParseInt(str2, 10, 64)
    n2 = int(n1)
    fmt.Printf("n1 type %T  n1=%v\n", n1, n1)
    fmt.Printf("n2 type %T n2=%v\n", n2, n2)

    var str3 string = "123.456"
    var f1 float64
    f1, _ = strconv.ParseFloat(str3, 64)
    fmt.Printf("f1 type %T f1=%v\n", f1, f1)


    //注意:如果强行将非该类型的值转换为该类型,例如将123转换为 bool 类型,
    //则为该类型的零值,例如 false
    var str4 string = "hello"
    var n3 int64 = 11
    n3, _ = strconv.ParseInt(str4, 10, 64)
    fmt.Printf("n3 type %T n3=%v\n", n3, n3)

}