数据类型转换
显式转换
Go在不同类型的变量之间赋值时需要显式转换。也就是说Golang中数据类型不能自动转换。
数值类型转换
1 | var i int32 = 100 |
注意:在转换中,比如将int64
转成int8【-128---127】
,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样。 因此在转换时,需要考虑范围。
基本数据类型与字符串转换
基本数据类型转字符串:fmt.Sprintf();该函数会返回转换后的字符串 1
2
3
4
5var b bool = true
var str string
str = fmt.Sprintf("%t", b)
fmt.Printf(str) //true
字符串转基本数据类型:使用包strconv 1
2
3
4var str string = "true"
var b bool
b, _ = strconv.ParseBool(str)
fmt.Printf("%v", b)
注意:在将String
类型转成基本数据类型时,要确保String
类型能够转成有效的数据,比如可以把"123",转成一个整数,但不能转换"hello",如果这样做,Golang 直接将其转成0
,其它类型也是一样的道理,如:float => 0 bool => false
。
类型别名
类型别名的使用
Go在1.9版本加入了类型别名。主要用于代码升级、迁移中类型的兼容问题(C/C++中使用宏来解决重构升级带来的问题)。
Go1.9之前的版本内建类型: 1
2type byte uint8
type rune int32
Go1.9之后的版本内建类型: 1
2type byte = uint8
type rune = int32
类型定义是定义了一个全新的类型的类型。类型别名只是某个类型的小名,并非创造了新的类型。
1 |
|
不同包下的类型别名
注意:不能为不在同一个包中的类型上定义方法。
1 | package main |
解决方案:使用别名定义(type MyDuration time.Duration),且将定义放在time包中