zoukankan      html  css  js  c++  java
  • Golang的类型转换实战案例

              Golang的类型转换实战案例

                                 作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

     

     

     

    一.数据类型概述

      基础数据类型概述,博主推荐阅读:
        布尔型:
          https://www.cnblogs.com/yinzhengjie2020/p/12246294.html
        整型:
          https://www.cnblogs.com/yinzhengjie2020/p/12246804.html
        浮点型:
          https://www.cnblogs.com/yinzhengjie2020/p/12247502.html
        字符型:
          https://www.cnblogs.com/yinzhengjie2020/p/12250350.html
        字符串型:
          https://www.cnblogs.com/yinzhengjie2020/p/12250787.html
    
      高级/复合数据类型概述,博主推荐阅读:


      温馨提示:
        向上转型:
          表示从较小的数据类型向较大的数据类型转换,比如将字节(byte)转换成int32,将int32转换成float64。
          在Java中,如果一个byte类型和一个int类型进行算数运算的话,Java会默认对byte类型的变量进行隐式向上转型,即将byte对应的变量转换成int类型来进行计算哟~
          但是,在Go语言中进行算数运算符操作时,要求元素的数据类型必须一致才能进行算数运算,且Go语言不会自动隐式向上转型,需要手动显式向上转型。

        向下转型:
          和向上转型相反,即从较大的数据类型向较小的数据类型转换,比如从float64类型转换成byte类型,就会出现高位截断的情况,也就是我们俗称的精度丢失。
          无论是Java语言还是Go语言中想要向下转型就得显式转换。

    二.数据类型转换案例实战

    1>.向上转型案例

    package main
    
    import (
        "fmt"
    )
    
    func main() {
    
        /*
            疫情期间我家周围的物美超市大白菜的价格竟然涨到了2.75元人民币/500g,你们呢?
        */
        Chinese_cabbage_price := 2.75 //自动推导浮点型默认是float64类型
        weight := 5                   //自动推导整形默认是int类型
        fmt.Printf("Chinese_cabbage_price的类型为:[%T],Chinese_cabbage_price的值为:%.2f
    ", Chinese_cabbage_price, Chinese_cabbage_price)
        fmt.Printf("weight的类型为:[%T],weight的值为:%d
    ", weight, weight)
        /*
            我们知道Chinese_cabbage_price的类型默认是float64类型,weight的类型默认是int类型。
    
            Go语言和Java不同,Go语言不会进行隐式向上转换类型,无论是向上还是向下转型都需要手动执行。
    
            综上所述,我们使用float64(weight)显式向上转型,即将weight的类型由int类型转换为float64类型,这样就可以进行算数运算符操作啦,计算结果如下所示。
        */
        Total_price := Chinese_cabbage_price * float64(weight)
        fmt.Printf("大白菜单价是%.2f元/500g,您购买了%d斤,总价为:[%.2f]元人名币
    ", Chinese_cabbage_price, weight, Total_price)
    }

    2>.向下转型案例

    package main
    
    import (
        "fmt"
    )
    
    func main() {
    
        /*
            疫情期间我家周围的物美超市大白菜的价格竟然涨到了2.75元人民币/500g,你们呢?
        */
        Chinese_cabbage_price := 2.75 //自动推导浮点型默认是float64类型
        weight := 5                   //自动推导整形默认是int类型
        fmt.Printf("Chinese_cabbage_price的类型为:[%T],Chinese_cabbage_price的值为:%.2f
    ", Chinese_cabbage_price, Chinese_cabbage_price)
        fmt.Printf("weight的类型为:[%T],weight的值为:%d
    ", weight, weight)
    
        /*
            我们知道Chinese_cabbage_price的类型默认是float64类型,weight的类型默认是int类型。
    
            Go语言和Java不同,Go语言不会进行隐式向上转换类型,无论是向上还是向下转型都需要手动执行。
    
            综上所述,我们使用int(Chinese_cabbage_price)显式向下转型,即将Chinese_cabbage_price的类型由float64类型转换为int类型,这样可能会导致数据精度丢失,计算结果如下所示。
        */
        Total_price := int(Chinese_cabbage_price) * weight
        fmt.Printf("大白菜单价是%.2f元/500g,您购买了%d斤,总价为:[%.d]元人名币
    ", Chinese_cabbage_price, weight, Total_price)
    }

    3>.int和int相关类型在进行计算式需要进行类型转换

    package main
    
    import "fmt"
    
    func main() {
    
        var a int = 10086
        var b int64 = 10010
        fmt.Printf("a的类型为%T,a的值为%d
    ", a, a)
        fmt.Printf("b的类型为%T,b的值为%d
    ", b, b)
    
        /*
            注意运算符的优先级,会先执行加法算数运算符,在执行逗号运算符
    
            int和int相关类型在进行计算式需要进行类型转换,如下所示。
        */
        fmt.Printf("a + b = %d
    ", int64(a)+b)
    }

  • 相关阅读:
    远程线程注入与CreateRemoteThread
    游戏修改器编写原理
    软件保护技术常见保护技巧
    反跟踪技术
    C++用static声明的函数和变量小结
    PE文件格式分析及修改
    MMX指令集在C++中的使用
    HOOKAPI之修改IAT法则
    如何获取 程序加载后的内存起始地址
    Java线程中断的本质和编程原则
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12289739.html
Copyright © 2011-2022 走看看