Last active
May 10, 2016 23:59
-
-
Save ogryzek/dfda7faa6bd8445b7509db21857d602c to your computer and use it in GitHub Desktop.
Go api endpoint to handle creating nested structs from json data
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* `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