最近,我一直在研究 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()
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)