【问题标题】:How to call a method in Golang from a different package如何从不同的包调用 Golang 中的方法
【发布时间】:2020-03-29 03:23:45
【问题描述】:

我的 errors.go 文件

 package errors

import (
    "net/http"
)

type RestError struct {
    Message string `json:"message"`
    Status  int    `json:"status"`
    Error   string `json:"error"`
}

func (err *RestError) NewBadRequestError(message string) {
    err.Message = message
    err.Status = http.StatusBadRequest
    err.Error = "bad_request"
}

我的 user.go 文件

 package users

import (
    errors "Utils/Errors"
)

type (
    User struct {
        ID       uint   `json:"id"`
        Name     string `json:"name"`
        LastName string `json:"last_name"`
        Email    string `json:"email"`
    }
)

func (u *User) Validate() (err *errors.RestError) {

    if u.Name == "" {
        return &err.NewBadRequestError("The name field can't be empty")
    }

    return nil
}

我总是得到以下编译器错误

err.NewBadRequestError(*message) (no value) used as valuecompiler

想知道我做错了什么。 我也试过 return &err.NewBadRequestError(message: "The name field can't be empty") 但仍然出现以下语法错误: 参数列表语法中缺少 ','

【问题讨论】:

  • 这不会引起您的直接问题,但import ( errors "Utils/Errors" ) 无效。 Go does not support relative imports.
  • 您好像有错字?你的意思是 &erros.NewBadRequestError("The name field can't be empty") ? --- err => 错误@Gaetan Sobze

标签: go


【解决方案1】:

您的问题与单独的包无关。

首先,err 没有定义。我假设您在粘贴的代码中未显示的某个地方定义了它。如果这是准确的......

return &err.NewBadRequestError("The name field can't be empty")

没有任何意义。

首先,err.NewBadRequestError() 没有返回任何内容,因此没有任何内容可以返回。

其次,你有一个&,这意味着获取值的地址,但再一次,没有值——这就是错误告诉你的。

不清楚您的代码是做什么用的,所以我不能确切地告诉您如何修复它。一种选择是从您的代码中删除 return &

    if u.Name == "" {
        err.NewBadRequestError("The name field can't be empty")
    }

另一种方法是修改NewBadRequestError 以返回一些值。

【讨论】:

  • error.go 文件是一个自定义错误处理文件。当我有一个错误的请求时,我返回一个接收 RestErr 结构的 NewBadRest 函数。 if u.Name == "" { err.NewBadRequestError("The name field can't be empty") } 表示如果我有一个空名称,我会返回一个 badrequest 响应自定义错误
猜你喜欢
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
相关资源
最近更新 更多