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

}
相关推荐
q***76565 分钟前
工作中常用springboot启动后执行的方法
java·spring boot·后端
头发够用的程序员12 分钟前
Python 魔法方法 vs C++ 运算符重载全方位深度对比
开发语言·c++·python
csbysj202014 分钟前
Java 发送邮件
开发语言
星火开发设计37 分钟前
异常规范与自定义异常类的设计
java·开发语言·前端·c++
xyq202439 分钟前
SQL Mid() 函数详解
开发语言
黄俊懿1 小时前
【架构师从入门到进阶】第一章:架构设计基础——第二节:架构设计原则
分布式·后端·中间件·架构
文艺倾年1 小时前
【源码精讲+简历包装】LeetcodeRunner—手搓调试器轮子(20W字-下)
java·开发语言·人工智能·语言模型·自然语言处理·大模型·免训练
励ℳ1 小时前
Python环境操作完全指南
开发语言·python
代码N年归来仍是新手村成员1 小时前
OpenClaw本地部署 + AWS Bedrock Claude 4.5 模型
后端·云计算·aws
invicinble1 小时前
centos7系统安装jdk
java·开发语言