猿问

简化 Go 代码

我有两个函数,如下所示,它们看起来很相似,但使用不同的函数来查询 db。由于 Go 不鼓励重载方法,冗余是否可以接受?或者我应该将它们重构为一个函数?欢迎所有评论。


var getCustomers = func() ([]customer, error) {

    return nil, nil

}


var getCustomerById = func(int64) (*customer, error) {

    return nil, nil

}


func listCustomer(w http.ResponseWriter, r *http.Request) *appError {

    cus, err := getCustomers()

    if err != nil {

        return &appError{err, "No customer found", 404}

    }


    res, err := json.Marshal(cus)


    if err != nil {

        return &appError{err, "Can't display record", 500}

    }


    fmt.Fprint(w, string(res))

    return nil

}


func viewCustomer(w http.ResponseWriter, r *http.Request, id int64) *appError {

    cus, err := getCustomerByID(id)

    if err != nil {

        return &appError{err, "No customer found", 404}

    }


    res, err := json.Marshal(cus)


    if err != nil {

        return &appError{err, "Can't display record", 500}

    }


    fmt.Fprint(w, string(res))

    return nil

}

建议使用 -1 列出所有客户,但我不确定这是否是最好的:


func viewCustomer(w http.ResponseWriter, r *http.Request, id int64) *appError {

    var c *customer

    var clist []customer

    var err error


    if id < 0 {

        clist, err = getCustomers()

        res, err := json.Marshal(clist)


        if err != nil {

            return &appError{err, "Can't display record", 500}

        }


        fmt.Fprint(w, string(res))

        return nil

    } else {

        c, err = getCustomerById(id)

        res, err := json.Marshal(c)


        if err != nil {

            return &appError{err, "Can't display record", 500}

        }


        fmt.Fprint(w, string(res))

        return nil

    }

}


jeck猫
浏览 202回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答