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

}
相关推荐
Morpheon11 分钟前
R语言非结构化文本挖掘入门指南
开发语言·r语言
import_random1 小时前
[macos]rocketmq(安装)
后端
程序员小假1 小时前
你会不会使用 SpringBoot 整合 Flowable 快速实现工作流呢?
java·后端
CPETW1 小时前
同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——C
c语言·开发语言·科技·stm32·单片机·嵌入式硬件·电子
代码中の快捷键1 小时前
如何实现一个登录功能?
java·开发语言
虾球xz1 小时前
CppCon 2015 学习:C++ devirtualization in clang
开发语言·c++·学习
明月与玄武2 小时前
快速掌握Django框架设计思想(图解版)
后端·python·django
陪我一起学编程2 小时前
关于ORM增删改查的总结——跨表
数据库·后端·python·django·restful
南囝coding2 小时前
这个 361K Star 的项目,一定要收藏!
前端·后端·github
看到我,请让我去学习2 小时前
C++核心编程(动态类型转换,STL,Lanmda)
c语言·开发语言·c++·stl