El objectid siempre es único e impredecible. Quiero eso, esta var debería tomar el valor de native.NewObjectID.Hex()
var mockData = `{"status":201,"message":"User Created Successfully!","data":{"data":"{"InsertedID":primitive.NewObjectID().Hex()}"}}`
Pero escribirlo así me da una cadena directa en la salida.
Tienes que "romper" el literal de cadena y concatenar las partes usando +
:
var mockData = `{"status":201,"message":"User Created Successfully!","data":{"data":{"InsertedID":"` + primitive.NewObjectID().Hex() + `"}}}`
Esto funcionará porque el ID de objeto hexadecimal no necesita ningún escape especial en JSON, pero en general, debe usar el paquete de encoding/json
para generar JSON válido (que conoce el escape adecuado).
Usando el paquete de encoding/json
, así es como podría verse:
var s struct { Status int `json:"status"` Message string `json:"message"` Data struct { Data struct { InsertedID string } `json:"data"` } `json:"data"` } s.Status = 201 s.Message = "User Created Successfully!" s.Data.Data.InsertedID = primitive.NewObjectID().Hex() out, err := json.Marshal(s) if err != nil { panic(err) } fmt.Println(string(out))
Pruebe los ejemplos en el Go Playground .