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

}
相关推荐
有梦想的攻城狮13 分钟前
spring中的@Configuration注解详解
java·后端·spring·configuration·配置类
言之。17 分钟前
Go语言中的错误处理
开发语言·后端·golang
这儿有一堆花1 小时前
JavaScript 代码搜索框
开发语言·javascript·ecmascript
席万里1 小时前
vscode详细配置Go语言相关插件
ide·vscode·golang
forestsea1 小时前
Java Class类文件结构
java·开发语言
鱼嘻2 小时前
数据结构------C语言经典题目(6)
linux·c语言·开发语言·数据结构·算法
ProgramHan2 小时前
JavaScript性能优化都优化什么
开发语言·javascript·ecmascript
快乐吃手手 : )3 小时前
Java泛型(补档)
java·开发语言
优雅的落幕3 小时前
【SpringBoot】基于mybatisPlus的博客管理系统(2)
java·spring boot·后端
Theodore_10223 小时前
Python3(19)数据结构
大数据·开发语言·数据结构·python·网络爬虫