golang接口和具体实现之间的类型转换

在 Go 语言中,如果你有一个接口类型的变量,并且你知道它的具体实现类型,你可以使用类型断言将其转换为具体类型。类型断言的语法是 value, ok := interfaceVar.(ConcreteType),其中 interfaceVar 是接口变量,ConcreteType 是具体类型。

复制代码
package main

import (
    "fmt"
)

// 定义一个接口
type Animal interface {
    Speak() string
}

// 定义一个具体类型
type Dog struct {
    Name string
}

// 实现接口方法
func (d Dog) Speak() string {
    return "Woof!"
}

func main() {
    // 创建一个 Dog 的实例,并将其赋值给接口类型的变量
    var animal Animal = Dog{Name: "Buddy"} 
    // case2:
    animalb := Animal(Dog{Name: "Buddy"})
    fmt.Printf("This animal is saying: %s\n", animalb.Speak())

    // 使用类型断言将接口变量转换为具体类型
    if dog, ok := animal.(Dog); ok {
        fmt.Printf("This is a Dog named %s and it says: %s\n", dog.Name, dog.Speak())
    } else {
        fmt.Println("The interface does not hold a Dog type")
    }

}
相关推荐
学习路上_write10 分钟前
FREERTOS_互斥量_创建和使用
c语言·开发语言·c++·stm32·单片机·嵌入式硬件
一起养小猫10 分钟前
《Java数据结构与算法》第三篇(下)队列全解析:从基础概念到高级应用
java·开发语言·数据结构
用户6389822458911 分钟前
使用Hutool的ExcelWriter导出复杂模板,支持下拉选项级联筛选
后端
程序员鱼皮13 分钟前
10个免费的网站分析工具,竟然比付费的更香?
后端·程序员·数据分析
码一行20 分钟前
Eino AI 实战: Eino 的文档加载与解析
后端·go
码一行21 分钟前
Eino AI 实战:DuckDuckGo 搜索工具 V1 与 V2
后端·go
未秃头的程序猿21 分钟前
🚀 设计模式在复杂支付系统中的应用:策略+工厂+模板方法模式实战
后端·设计模式
踏浪无痕22 分钟前
@Transactional的5种失效场景和自检清单
spring boot·后端·spring cloud
pale_moonlight31 分钟前
十、 Scala 应用实践 (上)
大数据·开发语言·scala
世界尽头与你1 小时前
Go pprof 调试信息泄露漏洞
安全·网络安全·golang·渗透测试