程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Go语言零到一:类型断言和转换(go语言示例)

balukai 2025-07-14 14:49:31 文章精选 3 ℃

引言

类型断言和类型转换是在 Go 语言中处理动态类型数据的关键工具。类型断言用于在运行时检查一个接口变量的具体类型,并将其转换为该类型。类型转换则用于将一个值从一种类型转换为另一种类型。

1. 类型断言

  • 基本语法
    • 使用 value.(type) 形式来断言接口变量的具体类型。
    • 示例:
var i interface{} = 42 
if num, ok := i.(int); ok { 
 fmt.Println(num) 
}
  • 使用类型断言
    • 类型断言用于从接口变量中提取具体类型值。
    • 示例:
var i interface{} = "hello" 
if str, ok := i.(string); ok { 
 fmt.Println(str) 
}
  • 类型断言失败
    • 如果类型断言失败,则返回 false 和零值。
    • 示例:
var i interface{} = 42 
if str, ok := i.(string); ok { 
 fmt.Println(str) 
} else { 
 fmt.Println("Not a string") 
}

2. 类型转换

  • 基本语法
    • 使用 (type) value 形式来进行类型转换。
    • 示例:
var f float64 = 3.14 
i := int(f) 
fmt.Println(i) // 输出 3
  • 隐式转换
    • Go 不支持隐式类型转换,必须显式进行转换。
    • 示例:
var i int = 42 var f float64 = float64(i)
  • 强制转换
    • 类型转换可能会导致精度损失或截断。
    • 示例:
var f float64 = 3.14 i := int(f) // 截断小数部分 fmt.Println(i) // 输出 3

3. switch 语句与类型断言结合使用

    • 结合 switch 语句和类型断言可以有效地处理不同类型的值。
    • 示例:
var hello interface{} = "hello world"
 switch val := hello.(type) {
 case int:
 	fmt.Println("Integer:", val)
 case string:
 	fmt.Println("String:", val)
 case float64:
 	fmt.Println("Float64:", val)
 default:
 	fmt.Println("Unknown type")
 }

4. 示例代码

package main

import (
  "fmt"
)

func main() {
  // 类型断言
  var i interface{} = 42
  if num, ok := i.(int); ok {
    fmt.Println(num) // 输出 42
  } else {
    fmt.Println("Not an int")
  }

  // 类型转换
  var f float64 = 3.14
  i = int(f)     // 截断小数部分
  fmt.Println(i) // 输出 3

  // 复杂示例
  var value interface{} = "Go is awesome"
  if str, ok := value.(string); ok {
    fmt.Println(str)
  } else {
    fmt.Println("Not a string")
  }

  // 类型转换与断言结合
  var num interface{} = 42
  if intVal, ok := num.(int); ok {
    floatVal := float64(intVal)
    fmt.Println(floatVal) // 输出 42.0
  }

  // 示例:使用具体的值
  var hello interface{} = "hello world"
  switch val := hello.(type) {
  case int:
    fmt.Println("Integer:", val)
  case string:
    fmt.Println("String:", val)
  case float64:
    fmt.Println("Float64:", val)
  default:
    fmt.Println("Unknown type")
  }

Tags:

最近发表
标签列表