一、基本数据类型之间的转换

  • Go在不同类型的变量之间赋值时需要显示转换,并且只有显示转换(强制转换)
  • 语法:
    • 表达式T(v)将值v转换为类型T
    • T:就是是数据类型
    • v:就是需要转换的变量
  • 示例
package main

import "fmt"

func main() {
	var n1 int = 100
	//进行类型转换
	var n2 float32 = float32(n1)
	fmt.Println(n2)
	//注意:n1的类型还是int,只是将n1的值转换成了float32而已
	fmt.Printf("%T", n1) //int

	//将int64转换为int8时,编译不会出错,但可能会存在数据的溢出
	var n3 int64 = 999999
	var n4 int8 = int8(n3)
	fmt.Println(n4) //63

	var n5 int32 = 12
	var n6 int64 = int64(n5) + 30 //运算时一定要匹配数据类型
	fmt.Println(n5, n6)           //12  42

	var n7 = 3
	//var n8 int8 = int8(n7) + 128  //编译不会通过
	var n9 int8 = int8(n7) + 127 //编译通过,但可能数据溢出
	fmt.Println(n9)              //-126
}

二、基本数据类型转换为string

  • 方式一:使用func Sprintf()     <----------推荐使用

package main

import "fmt"

func main() {
	var n1 int = 19
	var s1 string = fmt.Sprintf("%d", n1)
	fmt.Printf("s1对应的类型是: %T , s1 = %q", s1, s1)

	fmt.Println()

	var n2 float32 = 4.78
	var s2 string = fmt.Sprintf("%f", n2)
	fmt.Printf("s2对应的类型是: %T, s2 = %q", s2, s2)

	fmt.Println()

	var n3 bool = false
	var s3 string = fmt.Sprintf("%t", n3)
	fmt.Printf("s2对应的类型是: %T, s2 = %q", s3, s3)

	fmt.Println()

	var n4 byte = 'a'
	var s4 string = fmt.Sprintf("%c", n4)
	fmt.Printf("s2对应的类型是: %T, s2 = %q", s4, s4)

}

  • 示例:
func main() {
	var n1 int = 18
	//第一个参数必须转为int64类型,第二个参数指定字面值得进制形式为十进制
	var s1 string = strconv.FormatInt(int64(n1), 10)
	fmt.Printf("s1对应的类型是: %T , s1 = %q \n", s1, s1)

	var n2 float64 = 1.69
	//第二个参数:'f' (-ddd.dddd) 第三个参数:9 保留小数点后面9位  第四个参数:表示这个小数是float64类型
	var s2 string = strconv.FormatFloat(n2, 'f', 9, 64)
	fmt.Printf("s2对应的类型是: %T , s2 = %q \n", s2, s2)

	var n3 bool = true
	var s3 string = strconv.FormatBool(n3)
	fmt.Printf("s3对应的类型是: %T , s3 = %q \n", s3, s3)
}

三、string转换为基本数据类型

  • 示例
package main

import (
	"fmt"
	"strconv"
)

func main() {
	var s1 string = "true"
	var b bool
	//ParseBool的返回值有两个:(value bool, err error)
	//value就是我们所得到的bool类型的数据,err出现错误
	//err用_忽略
	b, _ = strconv.ParseBool(s1)
	fmt.Printf("b的类型是: %T, b=%v", b, b)

	//string ----> int64
	var s2 string = "19"
	var num1 int64
	num1, _ = strconv.ParseInt(s2, 10, 64)
	fmt.Printf("num1的类型是: %T, num1=%v", num1, num1)

	//string ----> float32/float64
	var s3 string = "3.14"
	var f1 float64
	f1, _ = strconv.ParseFloat(s3, 64)
	fmt.Printf("f1的类型是: %T, num1=%v", f1, f1)

	//注意:string向基本数据类型转换的时候,转不成功会返回对应的默认值
	var s5 string = "go"
	var b1 bool
	b1, _ = strconv.ParseBool(s5)
	fmt.Printf("b1的类型是: %T, b=%v", b1, b1) //false
}