前言

类型转换是编程语言当中最为常见不过的数据操作, 像javascript中的类型转换可以通过函数显示的转换, 也可以通过操作符隐式转换, 但是在go中必须显示的转换, 小值可转大类型, 大值可转小类型


一、什么是类型转换?

类型转换是将数据转换成另一种类型输出出来, 不会变量的类型

二、类型转换演示

注意: 只有相同底层数据类型的双方才可以使用T(x)模式进行转换, 底层数据类型不同则需要借助 strconv 包

0. strconv 接收

 strconv 提供了很多转换函数

     append 追加系列函数

     format  格式化类型系列函数

     parse   转换系列函数

1. 数字类型

   (1) 数字类型相互转换

package main

import (
	"fmt"
)

func main()  {
	var pub = 123
	var num1 int8 = int8(pub)
	var num2 int16 = int16(pub)
	var num3 uint32 = uint32(pub)
	var num4 uint64 = uint64(pub)
	var num5 float32 = float32(pub)
	var num6 float64 = float64(pub)
	fmt.Printf(`num1的类型 %T, num2的类型 %T, num3的类型 %T, num4的类型 %T, 
	num5的类型 %T, num6的类型 %T`,num1,num2,num3,num4,num5,num6)
}

变量pub没有指定类型, 因此会做类型推导, 推导出pub的类型为int, 由于int和int8,16,32,64,float类型底层数据类型都是数字所以可以使用T(x)模式转换, 如果转换的是字符串会报错

 2. 字符串类型

     (1) 字符串类型转成其他基础数据类型

package main

import (
	"fmt"
	"strconv"
)

func main()  {
	str := "123123123"  // 类型推导为 string 类型
	var b bool
	b, _ = strconv.ParseBool(str) // 将str转成bool类型
	fmt.Printf("b %T - %v\n", b, b)
	var num1 int64 
	num1, _ = strconv.ParseInt(str, 10, 64) // 将str转成int64
	fmt.Printf("num1 %T - %v\n", num1, num1)
	floatStr := "1.33232313123123"
	var num2 float64 
	num2, _ = strconv.ParseFloat(floatStr, 64) // 将floatStr转成float64
	fmt.Printf("num2 %T - %v\n", num2, num2)
}

 

     (2) 其他基础数据类型转成字符串类型

package main

import (
	"fmt"
	"strconv"
)

func main()  {
	s1 := strconv.FormatBool(true)
	s2 := strconv.FormatFloat(3.1415, 'E', -1, 64)
	s3 := strconv.FormatInt(-42, 16)
	s4 := strconv.FormatUint(42, 16)
	fmt.Printf("s1 %T - %v\n", s1, s1)
	fmt.Printf("s2 %T - %v\n", s2, s2)
	fmt.Printf("s3 %T - %v\n", s3, s3)
	fmt.Printf("s4 %T - %v\n", s4, s4)
}

 

 

总结

1. 同底使用T(x) 转, 不同底使用 strconv 转

2. 不会就找文档