ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【Go语言基础【11】】基本类型转换

【Go语言基础【11】】基本类型转换

文章目录

  • 零、转换速查
  • 一、基本类型转换规则
    • 1. 数值类型转换
      • (1)同类转换(精度可能丢失)
      • (2)跨类转换(需借助标准库)
    • 2. 自定义类型转换
  • 二、`strconv` 包:字符串与类型转换
    • 1. 字符串转数值
    • 2. 数值转字符串
      • (1)转字符串:`Itoa` / `FormatInt`
      • (2)转浮点数为字符串:`FormatFloat`

零、转换速查

转换方向方法/函数示例
数值→字符串strconv.Itoa/FormatIntstr := strconv.Itoa(123)
字符串→数值strconv.Atoi/ParseIntnum, _ := strconv.Atoi("456")
浮点→字符串strconv.FormatFloatstr := strconv.FormatFloat(3.14, 'f', 2, 64)
字符串→浮点strconv.ParseFloatf, _ := strconv.ParseFloat("3.14", 64)
自定义类型→基础类型显式转换(目标类型(源变量))type MyInt int; i := int(MyInt(10))
进制转换ParseInt/FormatInt指定basebinStr := strconv.FormatInt(10, 2)(十进制10→二进制"1010")

一、基本类型转换规则

Go语言是强类型语言,不同类型变量之间赋值需显式转换,格式为:
目标类型(源类型变量)

varafloat64=3.14varbint=int(a)// 显式转换:float64 → int

1. 数值类型转换

(1)同类转换(精度可能丢失)

  • 整型 ↔ 浮点型:
    • 浮点型转整型:直接截断小数部分(不四舍五入)。
      varffloat64=5.9variint=int(f)// i = 5
    • 有符号整型 ↔ 无符号整型:按二进制位直接转换(可能出现负数变正数)。
      varxint8=-1// 二进制:11111111(补码)varyuint8=uint8(x)// y = 255(无符号解释)

(2)跨类转换(需借助标准库)

  • 字符串 ↔ 数值:使用strconv包(见下文详细说明)。
    str:="123"num,err:=strconv.Atoi(str)// string → int

2. 自定义类型转换

通过type关键字定义的自定义类型,与原类型视为不同类型,需显式转换。

// 定义自定义类型 Age,底层为 inttypeAgeintvarage Age=25varnumint=int(age)// 自定义类型 → 基础类型varnewAge Age=Age(num)// 基础类型 → 自定义类型

二、strconv包:字符串与类型转换

strconv包提供字符串与基本类型(bool、int、float等)的相互转换功能,支持进制转换和精度控制。

1. 字符串转数值

(1)转整数:Atoi/ParseInt

  • Atoi(s string) (int, error):将字符串转为int(默认十进制)。
    num,err:=strconv.Atoi("123")// num=123, err=nil
  • ParseInt(s string, base int, bitSize int) (int64, error):
    • base:进制(2-36,0 表示自动判断前缀)。
    • bitSize:结果类型(0→int/uint,8→int8,16→int16等)。
    // 二进制字符串转 int16i,err:=strconv.ParseInt("1010",2,16)// i=10, err=nil

(2)转无符号整数:ParseUint

u,err:=strconv.ParseUint("255",10,8)// uint8类型,值255

(3)转浮点数:ParseFloat

f,err:=strconv.ParseFloat("3.14",64)// float64类型,值3.14


(4)转布尔值:ParseBool

b,err:=strconv.ParseBool("true")// b=true, err=nil

2. 数值转字符串

(1)转字符串:Itoa/FormatInt

  • Itoa(i int) string:将int转为十进制字符串。
    str:=strconv.Itoa(123)// str="123"
  • FormatInt(i int64, base int) string:按指定进制转字符串。
    binStr:=strconv.FormatInt(10,2)// 二进制:"1010"hexStr:=strconv.FormatInt(255,16)// 十六进制:"ff"

(2)转浮点数为字符串:FormatFloat

// 格式说明:'f'表示固定小数位,prec=2表示保留2位小数str:=strconv.FormatFloat(3.1415,'f',2,64)// "3.14"
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进