2017年5月

Golang 中的类型转换

基础类型转换

如下图

类型转换

string与其他类型转换

Golang中string类型和其他基础类型的转换主要通过 strconv 这个包来处理

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // string to int
    fmt.Println(strconv.Atoi("1")) //  ParseInt("1", 10, 0)
    // int to string
    fmt.Println(strconv.Itoa(1))

    // parse系函数: 将string转成其他类别
    // string to bool
    fmt.Println(strconv.ParseBool("true"))
    // string to float64
    fmt.Println(strconv.ParseFloat("3.1415", 64))
    // string to int64
    fmt.Println(strconv.ParseInt("-42", 10, 64))
    // The parse functions return the widest type (float64, int64, and uint64),
    // but if the size argument specifies a narrower width
    // the result can be converted to that narrower type without data loss
    // 第二个参数指定进制 第三个参数指定bit范围
    v64 := "354634382672430"
    if s, err := strconv.ParseInt(v64, 10, 32); err == nil {
        fmt.Printf("%T, %v\n", s, s)
    } else {
        // 超限,这里会报错,bitSize改成64则正常
        // strconv.ParseInt: parsing "354634382672430": value out of range
        fmt.Println(err)
    }
    // string to uint64
    fmt.Println(strconv.ParseUint("42", 10, 64))

    // format系函数: 将其他类别转成string
    fmt.Println(strconv.FormatBool(true))                 // true
    fmt.Println(strconv.FormatFloat(3.1415, 'E', -1, 64)) // 3.1415E+00
    fmt.Println(strconv.FormatInt(-42, 16))               // -2a
    fmt.Println(strconv.FormatUint(42, 16))               // 2a

    // append系函数: 跟format一样,只不过是将结果追加到一个slice上
}

参考

https://golang.org/pkg/strconv