go语言web系列2 json

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dote2r/article/details/82221884
package main

import (
	"net/http"
	"fmt"
	"net/url"
	"io/ioutil"
	"encoding/json"
	"log"
	"strconv"
)

type Hero struct {
	Name     string
	Skill    []Action
	Position int
}

type Action struct {
	Id   int
	Desc string
}

//	request:	localhost:9090/getHeroInfo?id=1
//	response:	{"Name":"SF","Skill":[{"Id":1,"Desc":"影压"},{"Id":2,"Desc":"收魂"},{"Id":3,"Desc":"减甲"},{"Id":4,"Desc":"挽歌"}],"Position":1}
func getHeroInfo(w http.ResponseWriter, r *http.Request) {
	queryForm, err := url.ParseQuery(r.URL.RawQuery)
	id, err := strconv.Atoi(queryForm["id"][0])
	if err != nil {
		fmt.Println("字符串转数字失败")
	}
	hero1 := Hero{
		Name: "SF",
		Skill: []Action{
			{Id: 1, Desc: "影压"},
			{Id: 2, Desc: "收魂"},
			{Id: 3, Desc: "减甲"},
			{Id: 4, Desc: "挽歌"},
		},
		Position: id,
	}
	hero1_info, err := json.Marshal(hero1)
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
	fmt.Fprintln(w, string(hero1_info))
}

//	request:	{"Name":"SF","Skill":[{"Id":1,"Desc":"影压"},{"Id":2,"Desc":"收魂"},{"Id":3,"Desc":"减甲"},{"Id":4,"Desc":"挽歌"}],"Position":1}
//	response:	{kaer [{1 天火} {2 冰墙} {3 吹风} {4 陨石}] 2}
func changeHeroInfo(w http.ResponseWriter, r *http.Request) {
	//var user map[string]interface{}
	var hero2 Hero
	body, _ := ioutil.ReadAll(r.Body)
	json.Unmarshal(body, &hero2)
	hero2.Name = "kaer"
	hero2.Skill = []Action{
		{Id: 1, Desc: "天火"},
		{Id: 2, Desc: "冰墙"},
		{Id: 3, Desc: "吹风"},
		{Id: 4, Desc: "陨石"},
	}
	hero2.Position = 2
	fmt.Fprintln(w, hero2)
}

func main() {
	http.HandleFunc("/getHeroInfo", getHeroInfo)
	http.HandleFunc("/changeHeroInfo", changeHeroInfo)
	err := http.ListenAndServe(":9090", nil)
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}

猜你喜欢

转载自blog.csdn.net/Dote2r/article/details/82221884