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")
    }

}
相关推荐
Undoom4 分钟前
智能开发环境下的 Diagram-as-Code 实践:MCP Mermaid 技术链路拆解
后端
ku_code_ku21 分钟前
python bert_score使用本地模型的方法
开发语言·python·bert
计算机毕设VX:Fegn089522 分钟前
计算机毕业设计|基于springboot + vue图书借阅管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
小马哥编程26 分钟前
【软考架构】滑动窗口限流算法的原理是什么?
java·开发语言·架构
疯狂的程序猴29 分钟前
IPA 深度混淆是什么意思?分析其与普通混淆的区别
后端
cci31 分钟前
Remote ssh无法连接?
后端
云栖梦泽34 分钟前
鸿蒙数据持久化实战:构建本地存储与云同步系统
开发语言·鸿蒙系统
wjs202440 分钟前
《Ionic 侧栏菜单》
开发语言
祁思妙想41 分钟前
linux常用命令
开发语言·python
JohnYan41 分钟前
Bun技术评估 - 22 Stream
javascript·后端·bun