Go语言中如何使用泛型<T extends Object>?

问题描述 投票:0回答:1

最近,我一直在研究 Go 语言中的泛型类型。在某些情况下,我需要使用 .我已经研究过 Go 文档,但找不到任何示例代码。

Go语言是否可以实现类似下面代码的功能?

class Person {
    name: string

    constructor(name: string) {
        this.name = name
    }
}

class Developer extends Person {
    skill: string

    constructor(name: string, skill: string) {
        super(name)
        this.skill = skill
    }
}

function Greet<T extends Person>(a: T, b: T) {
    console.log(a.name + " Hello " + b.name)
}

function main() {
    const a = new Person('Person A');
    const b = new Person('Person B');

    const dev = new Developer('The dev', 'Fullstack')

    Greet(a, b)
    Greet(dev, a)
}

main()
go
1个回答
0
投票

Greet 的参数是有名字的东西。定义一个接口来获取名称并使用该接口编写Greet函数:

type Namer interface {
    Name() string
}

func Greet(a, b Namer) {
    fmt.Println(a.Name(), "Hello", b.Name())
}

定义满足该接口的人员和开发人员类型:

type Person struct {
    name string
}

func (p *Person) Name() string { return p.name }

type Developer struct {
    name, skill string
}

func (d *Developer) Name() string { return d.name }

创建一些人员和开发者值并让他们打招呼:

a := &Person{"Person A"}
b := &Person{"Person B"}
dev := &Developer{"The dev", "Fullstack"}

Greet(a, b)
Greet(dev, a)

https://go.dev/play/p/qnFuUJevqgF

© www.soinside.com 2019 - 2024. All rights reserved.