在go中,如何为没有任何参数的类型创建构造函数

在go中,如何为没有任何参数的类型创建构造函数,go,Go,鉴于这种类型 type Response map[string]interface{} 我创建了一个方法NewResponse,它填充默认值: func NewResponse() Response { resp := Response{"status": 200, "msg": "Added jobs to queue"} resp_metadata := make(map[string]string) resp_metadata["base"] = "api/v

鉴于这种类型

type Response map[string]interface{}
我创建了一个方法NewResponse,它填充默认值:

 func NewResponse() Response {
    resp := Response{"status": 200, "msg": "Added jobs to queue"}

    resp_metadata := make(map[string]string)
    resp_metadata["base"] = "api/v1"
    resp_metadata["self"] = "/crawler/jobs/add"
    resp["metadata"] = resp_metadata
    return resp
}
我像
NewResponse()
一样调用它,但我想改为
Response.New()
,因此方法签名应该是这样的

func (Response) New() Response {
但是我总是在call to Response.New中遇到错误
参数不足


那么,如何实现这一点呢

虽然这绝对不是惯用的围棋,但你可以做一些事情:


但实际上,
func NewResponse()Response

没有什么错,尽管它绝对不是惯用的围棋,但您可以做一些事情:


但是实际上,func NewResponse()Response没有什么问题,它没有问题。Go没有构造函数。创建一个“空”对象就是创建一个对象类型的

您试图做的是对现有响应对象调用一个名为New的响应方法,该对象将返回一个(不同的)响应对象


resp:=Response{}
resp:=make(Response)
如果您需要创建一个空响应,则可以使用它。

它不需要。Go没有构造函数。创建一个“空”对象就是创建一个对象类型的

您试图做的是对现有响应对象调用一个名为New的响应方法,该对象将返回一个(不同的)响应对象


resp:=Response{}
resp:=make(Response)
如果您需要创建一个空响应,则可以使用。

编写围棋程序时,请使用惯用围棋。然后,其他人将能够阅读您的程序。比如说,

package main

import "fmt"

type Response map[string]interface{}

func NewResponse() Response {
    metadata := map[string]string{
        "base": "api/v1",
        "self": "/crawler/jobs/add",
    }
    r := Response{
        "status":   200,
        "msg":      "Added jobs to queue",
        "metadata": metadata,
    }
    return r
}

func main() {
    resp := NewResponse()
    fmt.Println(resp)
}
输出:

map[status:200 msg:Added jobs to queue metadata:map[base:api/v1 self:/crawler/jobs/add]]

编写围棋程序时,请使用惯用围棋。然后,其他人将能够阅读您的程序。比如说,

package main

import "fmt"

type Response map[string]interface{}

func NewResponse() Response {
    metadata := map[string]string{
        "base": "api/v1",
        "self": "/crawler/jobs/add",
    }
    r := Response{
        "status":   200,
        "msg":      "Added jobs to queue",
        "metadata": metadata,
    }
    return r
}

func main() {
    resp := NewResponse()
    fmt.Println(resp)
}
输出:

map[status:200 msg:Added jobs to queue metadata:map[base:api/v1 self:/crawler/jobs/add]]

谢谢:)我保留了最初的(新回复)版本,但将普基托比奥的回复标记为答案,因为它确实回答了“如何”的问题。但是现在我把代码更新到了你的版本。顺便说一句,我实际上是用它来自动整理成json的:func(r Response)String()(s String){b,err:=json.Marshal(r)if err!=nil{s=”“return}s=String(b)return}可能会对某人有所帮助。谢谢:)我保留了最初的(NewResponse)但版本将普基托比奥的回答标记为答案,因为它确实回答了“如何”的问题。但是现在我把代码更新到了你的版本。顺便说一句,我实际上是用它来自动整理成json,如下所示:func(r Response)String()(s String){b,err:=json.Marshal(r)如果err!=nil{s=”“return}s=String(b)return}它可能会帮助某些人。谢谢。保留了最初的版本,但仍然知道如何做到。谢谢。保留了最初的版本,但仍然知道如何做到这一点。