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

}
相关推荐
QuantumStack6 分钟前
【C++ 真题】P1104 生日
开发语言·c++·算法
whoarethenext22 分钟前
使用 C++/OpenCV 和 MFCC 构建双重认证智能门禁系统
开发语言·c++·opencv·mfcc
代码的奴隶(艾伦·耶格尔)1 小时前
后端快捷代码
java·开发语言
Jay_5152 小时前
C++多态与虚函数详解:从入门到精通
开发语言·c++
路来了2 小时前
Python小工具之PDF合并
开发语言·windows·python
六毛的毛2 小时前
Springboot开发常见注解一览
java·spring boot·后端
AntBlack2 小时前
拖了五个月 ,不当韭菜体验版算是正式发布了
前端·后端·python
31535669132 小时前
一个简单的脚本,让pdf开启夜间模式
前端·后端
xiaolang_8616_wjl2 小时前
c++文字游戏_闯关打怪
开发语言·数据结构·c++·算法·c++20
uzong3 小时前
curl案例讲解
后端