Given a go struct
type Company struct {
ID int `json:\"id\"`
Abn sql.NullString `json:\"abn,string\"`
}
w
Here is the code,
package main
import (
"database/sql"
"encoding/json"
"fmt"
"log"
)
//Company details
type Company struct {
ID int `json:"id"`
Abn NullString `json:"abn"`
}
//NullString is a wrapper around sql.NullString
type NullString sql.NullString
//MarshalJSON method is called by json.Marshal,
//whenever it is of type NullString
func (x *NullString) MarshalJSON() ([]byte, error) {
if !x.Valid {
return []byte("null"), nil
}
return json.Marshal(x.String)
}
func main() {
company := &Company{}
company.ID = 68
//create new NullString value
nStr := sql.NullString{String: "hello", Valid: true}
//cast it
company.Abn = NullString(nStr)
result, err := json.Marshal(company)
if err != nil {
log.Println(err)
}
fmt.Println(string(result))
}
Here is the blog post which explains it in detail.