登录
首页 >  Golang >  Go问答

方法的层叠调用

来源:stackoverflow

时间:2024-03-09 16:36:25 376浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《方法的层叠调用》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

如何在 go 中嵌套方法?

假设我有 2 个文件,每个文件位于不同的包中。

第一个文件:handlers/user.go

type resolver struct {
    client *elastic.client
    index  string
}

func (r *resolver) createuser(ctx context.context, name string) (*model.user, error) {
    u, err := services.createuserservice(ctx, r.client, r.index, name)
    
    if err != nil {
        return nil, err
    }

    return u, nil
}

an其他文件:services/user.go

func CreateUserService(ctx context.Context, client *elastic.Client, index string, name string) (*model.User, error) {

    u := &model.User{
        Name:   name
    }

    //doing some other function call
    err := dao.CreateUserDAO(ctx, client, index, s)

    if err != nil {
        return nil, err
    }

    return u, nil
}

这很好用。但我仍然需要传递 2 个参数,即 r.clientr.index

我想做的是拨打这样的电话 services.r.createuserservice(ctx, 名称)

这使我的代码更具可读性并且不那么混乱。

但我不确定如何更改服务包以适应此更改。

我怎样才能做到这一点?


解决方案


如果我理解正确,请尝试创建这样的方法。

func (r *Resolver) CreateUser(ctx context.Context, name string) (*model.User, error) {
    u, err := r.CreateUserService(ctx, name)

    if err != nil {
        return nil, err
    }

    return u, nil
}

func (r *Resolver) CreateUserService(ctx context.Context, name string) (*model.User, error) {

    return services.CreateUserService(ctx, r.client, r.index, name)

}

但我不知道如何像 services.r.createuserservice(ctx, name) 那样调用,除非 services 是一个包含 resolver 的类,这太奇怪了。

今天关于《方法的层叠调用》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

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