Skip to content

Instantly share code, notes, and snippets.

@ogryzek
Last active May 10, 2016 23:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ogryzek/dfda7faa6bd8445b7509db21857d602c to your computer and use it in GitHub Desktop.
Save ogryzek/dfda7faa6bd8445b7509db21857d602c to your computer and use it in GitHub Desktop.
Go api endpoint to handle creating nested structs from json data
/* `go run family.go` to run this on your localhost at port 3000
curl -X POST -d '{"family_name": "Smith", \
"members": [{"role": "parent", "gender": "female" \
, "age": 33}, {"role": "child", "gender": "male", "age": 5}, \
{"role": "parent", "gender": "male", "age": 40}]}' \
http://localhost:3000/family/new
Will print the following to the console:
The Smith family has 1 female parent aged 33, 1 male child aged 5, and
1 male parent aged 40. */
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type Family struct {
FamilyName string `json:"family_name"`
Members []FamilyMember `json:"members"`
}
type FamilyMember struct {
Role string `json:"role"`
Gender string `json:"gender"`
Age int `json:"age"`
}
func main() {
http.HandleFunc("/family/new", NewFamilyHandler)
http.ListenAndServe(":3000", nil)
}
func NewFamilyHandler(rw http.ResponseWriter, request *http.Request) {
decoder := json.NewDecoder(request.Body)
var family Family
decoder.Decode(&family)
fmt.Printf("The %s family has ", family.FamilyName)
var last = len(family.Members) - 1
for _, member := range family.Members {
fmt.Printf("1 %s %s aged %d", member.Gender, member.Role, member.Age)
if member == family.Members[last-1] {
fmt.Printf(", and ")
} else if member != family.Members[last] {
fmt.Println(",")
} else {
fmt.Println(".")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment