我正在尝试制作像构造函数一样的函数type DataResponse struct { status int message string data interface{}}func (d DataResponse) New(status int, message string, data interface{}) DataResponse { return DataResponse{ status, message, data, }}现在我这样称呼它func ReadUser(db *database.Database) fiber.Handler { return func(c *fiber.Ctx) error { id := IDFromParams(c) var User model.User result := db.First(&User, id) if result.Error != nil { panic(result.Error) } return SendDataResponse(c, DataResponse( 200, "User read", &User, )) }}Vscode 向我显示以下错误too many arguments in conversion to DataResponse为什么这么说?
1 回答
精慕HU
TA贡献1845条经验 获得超8个赞
Go 中的构造函数不像 C++、Java 等那样工作。
如果我想在 Go 中创建一个构造函数,它看起来像这样:
type DataResponse struct {
status int
message string
data interface{}
}
func NewDataResponse(status int, message string, data interface{}) DataResponse {
return DataResponse{
status,
message,
data,
}
}
被调用:
resp := NewDataResponse(200, "User read", &User)
您不需要构造函数,因为您可以使用以下命令创建结构的实例:
resp := DataResponse{
status: 200,
message: "User read",
data: &User,
}
如果您想简化使用(例如设置默认值)或初始化内部结构,有时构造函数是有意义的。
在您的情况下,如果您需要DataResponse从另一个包进行初始化,那么如果没有构造函数,您将无法做到这一点,因为它的所有字段都是私有的。
- 1 回答
- 0 关注
- 195 浏览
添加回答
举报
0/150
提交
取消
