类型转换 · golang · 看云
[TOC]
### **数值类型**
数值类型有整型与浮点型。go语言中的整型类型有int8、int16、int32、int64、int(字节数与平台相关),uint8(或byte)、uint16、uint32、uint64、uint、uintptr;浮点型有float32与float64。
数值类型之间可以使用强制类型转换,但是要注意转换时可能发生的精度问题与溢出问题
```
int32Value := (int32)int64Value
int64Value := (int64)int32Value
float32Value := (float32)int32Value
int32Value := (int32)float32Value
```
### **数值类型与string**
数值类型与string之间不能通过强制类型转换,需要使用`strconv`包中特定的函数
* 整型to字符串
```
str, err := strconv.Itoa(intValue) // int to str
str := strconv.FormatInt(int64Value, 10) // int64 to str, 十进制
str := strconv.FormatUint(uint64Value, 10) // uint64 to str, 十进制
```
上面的函数只提供了int、int64到string的转换函数,如果需要将int32等转化为string,先将它们强制转换为int64,再转换为string
* 字符串to整型
```
str, err := strconv.Itoa(intValue) // int to str
str := strconv.FormatInt(int64Value, 10) // int64 to str, 十进制
str := strconv.FormatUint(uint64Value, 10) // uint64 to str, 十进制
```
注意,`strconv.ParseInt()`虽然可以设置多少位,但是返回的一直是int64
* 浮点型to字符串
```
str := fmt.Sprintf("%.6f", float32OrFloat64)
```
* 字符串to浮点型
```
float64Value, err := strconv.ParseFloat(str, 64) // str to float64
```
注意`strconv.ParseFloat()`返回的一直是float64
### **空接口类型**
```
m := map[string]interface{}{"one": 1, "two": "second", "three": 3.0}
intValue := m["one"].(int)
str := m["two"].(string)
float64Value := m["three"].(float64)
```
### **Reference**
* [https://my.oschina.net/goal/blog/194308](https://my.oschina.net/goal/blog/194308)
* [https://blog.csdn.net/pkueecser/article/details/50433460](https://blog.csdn.net/pkueecser/article/details/50433460)