You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js转Go:如何实现带泛型与参数的可复用函数?

Go中实现带泛型的可复用request函数

Go 1.18及以上版本支持泛型,完全可以实现你需要的「泛型函数+额外参数」的复用功能,你的代码问题出在泛型参数的声明上,以下是修正后的实现:

修正核心代码

首先修正request方法的泛型声明,确保泛型参数与Handler结构体的类型绑定:

import "context"
// 假设你引入了graphql相关包

type Mwapp struct {
    Debug     bool            `json:"debug"`
    Context   context.Context `json:"-"`
    Client    graphql.Client  `json:"-"`
}

// 泛型Handler结构体,定义返回类型为T的调用逻辑
type Handler[T any] struct {
    caller        func(ctx context.Context, client graphql.Client) (*T, error)
    operationName string
}

// 修正泛型参数声明:明确[T any],参数Handler[T]与泛型T绑定
func (mwapp *Mwapp) Request[T any](handler Handler[T]) (*T, error) {
    res, err := handler.caller(mwapp.Context, mwapp.Client)
    return res, err
}

// 调用示例(需提前定义myAccountResponse、myAccount函数等)
func (mwapp *Mwapp) GetMyAccount() (*myAccountResponse, error) {
    return mwapp.Request(Handler[myAccountResponse]{caller: myAccount, operationName: "GetMyAccount"})
}

func (mwapp *Mwapp) GetMyApp() (*myMwappResponse, error) {
    return mwapp.Request(Handler[myMwappResponse]{caller: myApp, operationName: "GetMyApp"})
}

更贴近TypeScript示例的实现

如果你想直接模仿TS中request<T>(query: string, variables: object)的写法,也可以直接将query、variables作为函数参数,结合泛型返回结果:

// 直接接收query和variables,泛型T指定返回类型
func (mwapp *Mwapp) Request[T any](query string, variables map[string]interface{}) (*T, error) {
    var result T
    // 这里替换为你的GraphQL调用逻辑,比如使用graphql.Client执行查询
    err := mwapp.Client.Query(mwapp.Context, query, variables, &result)
    if err != nil {
        return nil, err
    }
    return &result, nil
}

// 调用示例
func (mwapp *Mwapp) GetMyAccount() (*myAccountResponse, error) {
    query := `query GetMyAccount { ... }`
    variables := map[string]interface{}{}
    return mwapp.Request[myAccountResponse](query, variables)
}

关键说明

  • 泛型参数声明必须放在函数名之后、参数列表之前,格式为[T any](any是Go中表示任意类型的约束)
  • 泛型可以与结构体、方法结合,实现类型安全的复用逻辑
  • 调用泛型方法时,Go通常可以自动推导泛型类型(如第一个示例中的Request调用),如果推导失败则需显式指定(如第二个示例的Request[myAccountResponse])

内容的提问来源于stack exchange,提问作者Kateile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:51:41