登录
首页 >  Golang >  Go问答

在TypeScript中模拟Golang泛型中的“扩展”功能是否可能?

来源:stackoverflow

时间:2024-02-20 13:33:17 349浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《在TypeScript中模拟Golang泛型中的“扩展”功能是否可能?》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

我正在尝试使用 go generics 创建一个函数,该函数接受任何满足最低结构标准的结构。像

下面是我的功能,我正在尝试找到一种方法使其发挥作用。我希望能够将具有 name stringage int 的任何结构传递给 printnameandage 函数,因为该函数将仅使用这两个字段。这可能吗?我找不到此用例的示例或文档?

package main

import "fmt"

type User struct {
    Name   string
    Age    int
    Height float32
}

type Car struct {
    Age   int
    Name  string
    Model string
}

type NameAndAge struct {
    Name string
    Age  int
}


func printNameAndAge[T (**missing extends or something like that**) NameAndAge](u T) {
    fmt.Println(u.Name)
    fmt.Println(u.Age)
}

func main() {
    newUser := User{
        Name:   "John",
        Age:    24,
        Height: 186,
    }
    newCar := Car{
        Name:  "Series 3",
        Age:   1,
        Model: "BMW",
    }

    printNameAndAge(newUser)
    printNameAndAge(newCar)

}

正确答案


使用接口。使用通用功能的方法定义接口。在每种类型上实现这些方法。

package main

import "fmt"

type User struct {
    Name   string
    Age    int
    Height float32
}

func (u User) getName() string { return u.Name }
func (u User) getAge() int     { return u.Age }

type Car struct {
    Age   int
    Name  string
    Model string
}

func (c Car) getName() string { return c.Name }
func (c Car) getAge() int     { return c.Age }

func printNameAndAge(x interface {
    getName() string
    getAge() int
}) {
    fmt.Println(x.getName())
    fmt.Println(x.getAge())
}

func main() {
    newUser := User{
        Name:   "John",
        Age:    24,
        Height: 186,
    }
    newCar := Car{
        Name:  "Series 3",
        Age:   1,
        Model: "BMW",
    }

    printNameAndAge(newUser)
    printNameAndAge(newCar)

}

以上就是《在TypeScript中模拟Golang泛型中的“扩展”功能是否可能?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>