zoukankan      html  css  js  c++  java
  • 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
    ", b1, b1)
        b2 := fmt.Sprintf("%f", a2)
        fmt.Printf("b2类型%T b2=%q
    ", b2, b2)
        b3 := fmt.Sprintf("%t", a3)
        fmt.Printf("b3类型%T b3=%q
    ", b3, b3)
        b4 := fmt.Sprintf("%c", a4)
        fmt.Printf("b4类型%T b4=%q
    ", 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
    ", b1, b1)
        // 'f'表示格式,10表示小数位保留10位,64表示这个小数是float64类型
        b2 := strconv.FormatFloat(a2, 'f', 10, 64)
        fmt.Printf("b2类型%T b2=%q
    ", b2, b2)
        b3 := strconv.FormatBool(a3)
        fmt.Printf("b3类型%T b3=%q
    ", 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
    ", 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
    ", f1, f1) //f1的类型位float64 f1=123.56
    
        var str3 string = "false"    
        var b1 bool
        b1, _ = strconv.ParseBool(str3)
        fmt.Printf("b1的类型位%T f1=%v
    ", b1, b1) //b1的类型位bool f1=false
    
    }

    注意事项:

    • string转成基本类型要确保是有效的数据类型,比如不能将string类型值为”hello“转成int类型
    • string转int,float基本数据类型时,返回值是int64或者float64,如果需要其它类型需要再进行转化
    作者:iveBoy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    HDU 2054 A == B ?(找小数点)
    javaWeb_使用标签库简化jsp
    EC2的维护更新-总结篇及有效经验分享
    SSLStrip 终极版 —— location 瞒天过海
    华为部分真机调试无法显示log问题解决
    LeetCode
    Tcl脚本调用高层API实现仪表使用和主机创建配置的自己主动化測试用例
    web工程调用hadoop集群1.2
    3DShader之移位贴图(Displacement Mapping)
    Java 学习第一天
  • 原文地址:https://www.cnblogs.com/shenjianping/p/15160853.html
Copyright © 2011-2022 走看看