Go 快速入门指南 - 字符和数据类型转换

字符

Go 中表示字符的关键字为 rune, 也就是 int32 的别名。

ASCII 码只需要 7 bit 就可以完整地表示,但只能表示英文字母在内的128个字符。 为了表示世界上大部分的文字系统,发明了 Unicode, 它是 ASCII 的超集,包含世界上书写系统中存在的所有字符, 并为每个代码分配一个标准编号(称为Unicode CodePoint),在 Go 中称之为 rune

语法规则

由单引号 ' 括起来,只能包含一个字符

字符串长度

关于字符串不同编码对长度的计算方式,感兴趣的读者可以参考扩展阅读。

例子

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    s := 'a'
    fmt.Printf("s type = %T, len = %d\n", s, utf8.RuneLen(s))

    s2 := '我'
    fmt.Printf("s2 type = %T, len = %d\n", s, utf8.RuneLen(s2))
}
// $ go run main.go
// 输出如下
/**
    s type = int32, len = 1
    s2 type = int32, len = 3
*/

数据类型转换

Go 是强类型语言,因此不会进行隐式类型转换 (例如不能直接将一个 浮点型 转换为 整型)。任何不同类型之间的转换都必须显式说明。

在类型转换时,要注意两边的值类型大小,可以将一个较小的值类型转换为一个较大的值类型,但是反过来,却有可能报错。 例如:将一个 int64 转换为 int32 时,可能会产生 溢出。

直接转换

直接转换 适用于两边值类型相同的情况,比如 int 和 float, 都是数字类型。

语法规则

```shell
变量名称 = 数据类型(变量值)
# 例子
n := 123
floatN := float64(n)  // 将 n 转换为 float64 类型       

例子

整数转换为浮点数

package main

import "fmt"

func main() {
    n := 100
    fmt.Println(float64(n))
}

// $ go run main.go
// 输出如下 
/**
    100
*/

浮点数转换为整数

package main

import "fmt"

func main() {
    pi := 3.14
    fmt.Println(int64(pi))
}

// $ go run main.go
// 输出如下 
/**
    3
*/

调用方法转换

对于两边值类型不相同的情况,比如 int 和 string,无法进行直接转换,比如下面的代码是错误的:

package main

import "fmt"

func main() {
    pi := 3.14
    fmt.Println(string(pi))
}

// 运行报错: Cannot convert an expression of the type 'float64' to the type 'string'

这时候,需要调用一些内置的方法进行转换,这里介绍几个常用的 数字 和 字符串 之间转换用到的方法。

常用方法

  • • strconv.Itoa() 将 int 转换为 string

  • • strconv.Atoi() 将 string 转换为 int

  • • strconv.FormatFloat() 将 float64 转换为 string

  • • strconv.ParseFloat() 将 string 转换为 float64

例子

package main

import (
    "fmt"
    "strconv"
)

func main() {
    s := strconv.Itoa(1024)
    fmt.Printf("%T, %v\n", s, s) // 将整型转换为字符串

    n, _ := strconv.Atoi("1024")
    fmt.Printf("%T, %v\n", n, n) // 将字符串转换为整型

    s2 := strconv.FormatFloat(3.1415, 'f', -1, 64)
    fmt.Printf("%T, %v\n", s2, s2) // 将浮点型转换为字符串

    n2, _ := strconv.ParseFloat("3.1415", 64)
    fmt.Printf("%T, %v\n", n2, n2) // 将字符串转换为浮点型
}
// $ go run main.go
// 输出如下 
/**
    string, 1024
    int, 1024
    string, 3.1415
    float64, 3.1415
*/

扩展阅读

  1. 1. 十分钟搞清字符集和字符编码 (http://cenalulu.github.io/linux/character-encoding/)

  2. 2. 溢出 - 维基百科 (https://zh.wikipedia.org/wiki/算術溢出)

联系我

公众号

posted @ 2022-12-22 16:19  洋芋土豆  阅读(131)  评论(0编辑  收藏  举报