Go语言类型强制转换
由于 Go语言是强类型的语言,如果不满足自动转换的条件,则必须进行强制类型转换。任意两个不相干的类型如果进行强制转换,则必须符合一定的规则。
强制类型的语法格式:
非常量类型的变量 x 可以强制转化并传递给类型 T,需要满足如下任一条件:
1) x 可以直接赋值给 T 类型变量。
2) x 的类型和 T 具有相同的底层类型。
示例代码如下所示:
4) x 的类型和 T 都是整型,或者都是浮点型。
5) x 的类型和 T 都是复数类型。
6) x 是整数值或 []byte 类型的值, T 是 string 类型。
7) x 是一个字符串,T 是 []byte 或 []rune 。
字符串和字节切片之间的转换最常见,示例如下:
强制类型的语法格式:
var a T = (T) (b)
,使用括号将类型和要转换的变量或表达式的值括起来。非常量类型的变量 x 可以强制转化并传递给类型 T,需要满足如下任一条件:
1) x 可以直接赋值给 T 类型变量。
2) x 的类型和 T 具有相同的底层类型。
示例代码如下所示:
package main import{ "fmt" } type Map map[string]string func (m Map) Print() { for _, key := range m { fmt.Println (key) } } type iMap Map //只妥底层类型是 slice、map 等支持 range 的类型字面量,新类型仍然可以使用 range 迭代 func (m iMap) Print() { for _, key := range m { fmt.Println(key) } } func main() { mp := make(map[string]string, 10) mp["hi"] = "tata" //mp 与 ma 有相同的底层类型 map[string]stirng,并且 mp 是未命名类型 var ma Map = mp // im 与 ma 虽然有相同的底层类型,但是二者中没有一个是字面量类型,不能直接赋佳,可以 // 强制进行类型转换 //var im iMap = ma var im iMap = (iMap) (ma) ma.Print() im.Print() }3) x 的类型和 T 都是未命名的指针类型,并且指针指向的类型具有相同的底层类型。
4) x 的类型和 T 都是整型,或者都是浮点型。
5) x 的类型和 T 都是复数类型。
6) x 是整数值或 []byte 类型的值, T 是 string 类型。
7) x 是一个字符串,T 是 []byte 或 []rune 。
字符串和字节切片之间的转换最常见,示例如下:
s := "hello, 世界!"
var a []byte
a = []byte(s)
var b string
b = string(a)
var c []rune
c = []rune(s)
fmt.Printf("%T\n", a) //[]uint8 byte 是 int8 的别名
fmt.Printf("%T\n", b) //string
fmt.Printf("%T\n", c) //int32 rune 是 int32 的别名
- 数值类型和 string 类型之间的相互转换可能造成值部分丢失;其他的转换仅是类型的转换,不会造成值的改变。string 和数字之间的转换可使用标准库 strconv。
- Go语言没有语言机制支持指针和 interger 之间的直接转换,可以使用标准库中的 unsafe 包进行处理。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频