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

}
相关推荐
wuyk5555 分钟前
Python 零基础入门第九章:用户输入与 While 循环
开发语言·python
wno7046 分钟前
Spring Boot配合Hibernate Validator参数校验
spring boot·后端·hibernate
兮动人9 分钟前
Python变量与常量
开发语言·python·机器学习·python变量与常量
风筝在晴天搁浅17 分钟前
解题代码清爽版
java·开发语言
Java后端的Ai之路24 分钟前
21、Python - 命令模式
开发语言·人工智能·python·命令模式·外观模式
astronautyi29 分钟前
Go 运行时内存分配与 GC 位图深度剖析
开发语言·后端·golang
techdashen36 分钟前
Go 中如何处理错误
开发语言·后端·golang
孙克旭_1 小时前
JVM 入门详解:JVM、JRE、JDK 区别,JVM 基础结构梳理
java·开发语言·jvm
随遇而安zx1 小时前
【地基篇】---JVM 内存结构知识点(Java 8 运行时数据区深度解析)
java·开发语言·jvm
GoGeekBaird1 小时前
Agent 时代,你的生产环境,真的敢让它裸奔吗
后端·agent