Fork me on GitHub

Go语言之数据类型(二)

一、基本数据类型的默认值

数据类型 默认值
整型 0
浮点型 0
布尔型 false
字符串 ""

测试:

package main

import "fmt"

func main() {
    // 数据类型默认值
    var a int
    var b float32
    var c float64
    var isStatus bool
    var username string

    // 打印出默认值
    fmt.Printf("a=%d, b=%v, c=%v, isStatus=%v, username=%v", a, b, c, isStatus, username) //a=0, b=0, c=0, isStatus=false, username=""
}

二、基本数据类型相互转换

 Go中不同的数据类型之间需要显式转换,不同类型之间不能自动转换。

package main

import "fmt"

func main() {
    var i int32 = 10

    // i int32-->float
    var j float32 = float32(i)

    // 高精度-->低精度
    var k int8 = int8(i)

    // 低精度-->高精度
    var m int64 = int64(i)

    fmt.Printf("i=%v j=%v k=%v m=%v", i, j, k, m) //i=10 j=10 k=10 m=10

}

注意:

  • Go中高精度可以转成低精度,同样低精度也可以转成高精度,但是如果高精度转低精度无法盛放会造成溢出的现象
  • 被转换的是数据值,而它本身的类型并没有变化

三、基本数据类型和string之间的转换

(一)基本数据类型转string

 1、func Sprintf(format string, a ...interface{}) string

Sprintf根据format参数生成格式化的字符串并返回该字符串。

package main

import "fmt"

func main() {

    var a1 int = 10
    var a2 float64 = 10.236
    var a3 bool = false
    var a4 byte = 'k'

    // fmt.Sprintf转换
    b1 := fmt.Sprintf("%d", a1)
    fmt.Printf("b1类型%T b1=%q\n", b1, b1)
    b2 := fmt.Sprintf("%f", a2)
    fmt.Printf("b2类型%T b2=%q\n", b2, b2)
    b3 := fmt.Sprintf("%t", a3)
    fmt.Printf("b3类型%T b3=%q\n", b3, b3)
    b4 := fmt.Sprintf("%c", a4)
    fmt.Printf("b4类型%T b4=%q\n", b4, b4)
    /*
      输出
      b1类型string b1="10"
      b2类型string b2="10.236000"
      b3类型string b3="false"    
      b4类型string b4="k"        
      b5类型string b5="hello"  
    */
}

2、使用strconv包中的函数

 strconv包实现了基本数据类型和其字符串表示的相互转换,其中基本数据类型转string的函数包含:

package main

import (
    "fmt"
    "strconv"
)

func main() {

    var a1 int = 10
    var a2 float64 = 10.236
    var a3 bool = false

    // FormatInt函数第一个参数是int64类型的参数,所以需要转换
    b1 := strconv.FormatInt(int64(a1), 10)
    fmt.Printf("b1类型%T b1=%q\n", b1, b1)
    // 'f'表示格式,10表示小数位保留10位,64表示这个小数是float64类型
    b2 := strconv.FormatFloat(a2, 'f', 10, 64)
    fmt.Printf("b2类型%T b2=%q\n", b2, b2)
    b3 := strconv.FormatBool(a3)
    fmt.Printf("b3类型%T b3=%q\n", b3, b3)
    /*
      输出
        b1类型string b1="10"
        b2类型string b2="10.2360000000"
        b3类型string b3="false"   
    */
}

(二)string类型转基本数据类型

使用strconv包中的如下函数:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var str1 string = "123"
    var n1 int64
    // strconv.ParseInt返回两个值(i int64, err error)
    // 将第二个err忽视使用 _
    n1, _ = strconv.ParseInt(str1, 10, 64)
    fmt.Printf("n1的类型位%T n1=%v\n", n1, n1) //n1的类型位int64 n1=123

    var str2 string = "123.56"
    var f1 float64
    f1, _ = strconv.ParseFloat(str2, 64)
    fmt.Printf("f1的类型位%T f1=%v\n", f1, f1) //f1的类型位float64 f1=123.56

    var str3 string = "false"    
    var b1 bool
    b1, _ = strconv.ParseBool(str3)
    fmt.Printf("b1的类型位%T f1=%v\n", b1, b1) //b1的类型位bool f1=false

}

注意事项:

  • string转成基本类型要确保是有效的数据类型,比如不能将string类型值为”hello“转成int类型
  • string转int,float基本数据类型时,返回值是int64或者float64,如果需要其它类型需要再进行转化

 

posted @ 2021-08-19 20:45  iveBoy  阅读(80)  评论(0编辑  收藏  举报
TOP