zoukankan      html  css  js  c++  java
  • Golang常见类型转换

    **

    1.Type(expression):

    **

    int(time.Now().Weekday()) //星期转int
    int(time.Now().Month())   //月份转int
    
    var a float64
    a = 3.1
    b := int(a) //float64转int
    
    var a int
    a = 1
    b := int64(a) //int转int64
    

    **

    2.strconv包:

    **
    string和int、int32、int64:

    i, _ := strconv.Atoi(s) //string转int
    s := strconv.Itoa(i)    //int转string
    
    i, _ := strconv.ParseInt(s, 10, 32) //string转int32
    ii := int32(i)
    
    i, _ := strconv.ParseInt(s, 10, 64) //string转int32
    s := strconv.FormatInt(i, 10)       //int64转string
    

    ParseInt函数的官方介绍:

    func ParseInt(s string, base int, bitSize int) (i int64, err error)
    

    –返回字符串表示的整数值,接受正负号。

    –base指定进制(2到36),如果base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,否则是10进制。

    –bitSize指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64。

    –返回的err是*NumErr类型的,如果语法有误,err.Error = ErrSyntax;如果结果超出类型范围err.Error = ErrRange。

    FormatInt函数中的10,表示10进制。

    string和float32、float64:

    f, _ := strconv.ParseFloat(s, 32)        //string转float32
    ff := float32(f)
    
    f, _ := strconv.ParseFloat(s, 64)        //string转float64
    s := strconv.FormatFloat(f, 'f', -1, 64) //float64转string
    

    ParseFloat函数的官方介绍:

    func ParseFloat(s string, bitSize int) (f float64, err error)
    

    –解析一个表示浮点数的字符串并返回其值。

    –如果s合乎语法规则,函数会返回最为接近s表示值的一个浮点数(使用IEEE754规范舍入)。

    –bitSize指定了期望的接收类型,32是float32(返回值可以不改变精确值的赋值给float32),64是float64。

    –返回值err是*NumErr类型的,语法有误的,err.Error=ErrSyntax;结果超出表示范围的,返回值f为±Inf,err.Error= ErrRange。

    FormatFloat函数的官方介绍:

    func FormatFloat(f float64, fmt byte, prec, bitSize int) string
    

    –bitSize表示f的来源类型(32:float32、64:float64),会据此进行舍入。

    –fmt表示格式:‘f’(-ddd.dddd)、‘b’(-ddddp±ddd,指数为二进制)、‘e’(-d.dddde±dd,十进制指数)、‘E’(-d.ddddE±dd,十进制指数)、‘g’(指数很大时用’e’格式,否则’f’格式)、‘G’(指数很大时用’E’格式,否则’f’格式)。

    –prec控制精度(排除指数部分):对’f’、‘e’、‘E’,它表示小数点后的数字个数;对’g’、‘G’,它控制总的数字个数。如果prec 为-1,则代表使用最少数量的、但又必需的数字来表示f。

    string和time:

    t, _ := time.Parse("2006-01-02 15:04:05", s) //string转时间
    t, _ := time.ParseInLocation("2006-01-02 15:04:05", s, time.Local) //string转本地时间
    s := t.Format("2006-01-02 15:04:05")         //时间转string
    

    **

    3.类型断言:expression.(Type):

    **

    expression必须是接口类型,且自身类型与Type类型相符。

    expression.(Type)的返回值一般为两个:value和ok,匹配成功ok为true,value有值,匹配失败ok为false,value无值;也可以直接接受value一个返回值,不过失败则直接panic:

    func main() {
      var a interface{} = 100
      if aa, ok := a.(int); ok {
        fmt.Println(aa)
      }
    }
    

    还可以结合switch和case使用,来判断接口实际类型:

    func main() {
      var t interface{} = 100
      switch i := t.(type) {
      case float32:
        fmt.Printf("i的类型%T i的值%v
    ", i, i)
      case float64:
        fmt.Printf("i的类型%T i的值%v
    ", i, i)
      case int:
        fmt.Printf("i的类型%T i的值%v
    ", i, i)
      case bool:
        fmt.Printf("i的类型%T i的值%v
    ", i, i)
      case string:
        fmt.Printf("i的类型%T i的值%v
    ", i, i)
      default:
        fmt.Println("其他类型")
      }
    }
    

    **

    4.JSON:

    **

    Golang中大多数数据类型都可以转化为有效的JSON文本,除了channel通道、complex复数、func函数等。

    Golang指针可进行隐式转换,表面进行的是指针序列化,内部会针对指针进行取值操作,实际还是针对所指的对象进行序列化。

    公众号:李田路口

  • 相关阅读:
    python基础学习(九)
    python基础学习(八)
    python基础学习(七)
    python基础学习(六)
    python基础学习(五)
    python基础学习(四)
    python基础学习(三)
    mysql-binlog server的实现
    percona-toolkit常用工具
    Linux下如何快速定位系统瓶颈在哪里
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12432449.html
Copyright © 2011-2022 走看看