go语言数据类型转换教程


本文摘自php中文网,作者尚,侵删。


Go不会对数据进行隐式的类型转换,只能手动去执行转换操作。下面我们来看一下go语言中进行数据类型转换的方法 。

简单的转换操作

转换数据类型的方式很简单。

1

valueOfTypeB = typeB(valueOfTypeA)

例如:

1

2

3

4

5

// 浮点数

a := 5.0

 

// 转换为int类型

b := int(a)

Go允许在底层结构相同的两个类型之间互转。例如:

1

2

3

4

5

6

7

8

9

10

11

// IT类型的底层是int类型

type IT int

 

// a的类型为IT,底层是int

var a IT = 5

 

// 将a(IT)转换为int,b现在是int类型

b := int(5)

 

// 将b(int)转换为IT,c现在是IT类型

c := IT(b)

但注意:

1、不是所有数据类型都能转换的,例如字母格式的string类型"abcd"转换为int 肯定会失败

2、低精度转换为高精度时是安全的,高精度的值转换为低精度时会丢失精度。例如int32转 换为int16,float32转换为int

3、这种简单的转换方式不能对int(float)和string进行互转,要跨大类型转换,可以使用 strconv包提供的函数

strconv

strconv包提供了字符串与简单数据类型之间的类型转换功能。可以将简单类型转换为字符 串,也可以将字符串转换为其它简单类型。

这个包里提供了很多函数,大概分为几类:

1、字符串转int:Atoi()

2、int转字符串: Itoa()

3、ParseTP类函数将string转换为TP类型:ParseBool()、ParseFloat()、ParseInt()、 ParseUint()。因为string转其它类型可能会失败,所以这些函数都有第二个返回值表示是否转 换成功

4、FormatTP类函数将其它类型转string:FormatBool()、FormatFloat()、FormatInt()、 FormatUint()

5、AppendTP类函数用于将TP转换成字符串后append到一个slice中:AppendBool()、 AppendFloat()、AppendInt()、AppendUint()

还有其他一些基本用不上的函数,见官方手册:go doc strconv或者 https://golang.org/pkg/strconv/。

当有些类型无法转换时,将报错,返回的错误是strconv包中自行定义的error类型。有两种 错误:

1

2

3

4

var ErrRange = errors.New("value out of

 

range")

var ErrSyntax = errors.New("invalid syntax")

例如,使用Atoi("a")将"a"转换为int类型,自然是不成功的。如果 print输出err信息,将显示:

1

2

3

strconv.Atoi: parsing "a": invalid

 

syntax

string和int的转换

最常见的是字符串和int之间的转换:

1.int转换为字符串:Itoa()

1

2

// Itoa(): int -> string

println("a" + strconv.Itoa(32))  // a32

2.string转换为int:Atoi()

1

func Atoi(s string) (int, error)

由于string可能无法转换为int,所以这个函数有两个返回值:第一个返回值是转换成int的 值,第二个返回值判断是否转换成功。

1

2

3

4

5

6

7

8

// Atoi(): string -> int

i,_ := strconv.Atoi("3")

println(3 + i)   // 6

// Atoi()转换失败

i,err := strconv.Atoi("a")

if err != nil {

    println("converted failed")

}

Parse类函数

Parse类函数用于转换字符串为给定类型的值:ParseBool()、ParseFloat()、ParseInt()、 ParseUint()。

由于字符串转换为其它类型可能会失败,所以这些函数都有两个返回值,第一个返回值保存 转换后的值,第二个返回值判断是否转换成功。

1

2

3

4

b, err := strconv.ParseBool("true")

f, err := strconv.ParseFloat("3.1415", 64)

i, err := strconv.ParseInt("-42", 10, 64)

u, err := strconv.ParseUint("42", 10, 64)

ParseFloat()只能接收float64类型的浮点数。

ParseInt()和ParseUint()有3个参数:

1

2

3

4

func ParseInt(s string, base int, bitSize int)

 

(i int64, err error)

func ParseUint(s string, base int, bitSize int) (uint64, error)

bitSize参数表示转换为什么位的int/uint,有效值为0、8、16、32、64。当bitSize=0的时 候,表示转换为int或uint类型。例如bitSize=8表示转换后的值的类型为int8或uint8。

阅读剩余部分

相关阅读 >>

Go语言如何设置定时器

Go语言中map可以定义长度吗

Go语言属于什么

Go语言怎么求绝对值

为什么docker用Go语言

Go语言结构体详解

Go语言中如何使用模板引擎

Go语言中时间戳格式化的方法

Go语言 continue 语句

Go语言如何获取时间戳

更多相关阅读请进入《Go语言》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...