分享
  1. 首页
  2. 文章

golang入门案例之http client请求

nazhizq · · 1336 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

发请求,接收接送,并解析

package main
import (
	"fmt"
	"net/http"
	"io/ioutil"
	"net/url"
	"encoding/json"
	"os"
)
type Student struct {
	Name string
	Age int
	Guake bool
	Classes []string
	Price float32
}
func (s *Student) ShowStu() {
	fmt.Println("show Student :")
	fmt.Println("\tName\t:", s.Name)
	fmt.Println("\tAge\t:", s.Age)
	fmt.Println("\tGuake\t:", s.Guake)
	fmt.Println("\tPrice\t:", s.Price)
	fmt.Printf("\tClasses\t: ")
	for _, a := range s.Classes {
		fmt.Printf("%s ", a)
	}
	fmt.Println("")
}
type multitypeTest struct {
	One string `json:"one"`
	Two string `json:"two"`
}
func (s *multitypeTest) Showmul() {
	fmt.Println("show Student :")
	fmt.Println("\tName\t:", s.One)
	fmt.Println("\tAge\t:", s.Two)
}
func IndexHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, "hello world")
}
func main() {
	//jsonTest()
	httpGet()
}
func httpPostForm() {
	resp, err := http.PostForm("",
		url.Values{"key": {"Value"}, "id": {"123"}})
	if err != nil {
		// handle error
	}
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		// handle error
	}
	fmt.Println(string(body))
}
func httpGet() {
	resp, err := http.Get("https://X.rong360.com/XXX/XXX")
	CheckError(err)
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	CheckError(err)
	fmt.Println(string(body))
	//f1 := &multitypeTest{
	//	One:"a",
	//	Two:"b",
	//	}
	//f1.Showmul()
	//fjson1, err := json.Marshal(f1)
	//fmt.Println(string(fjson1))
	CheckError(err)
	f2 := &multitypeTest{}
	err = json.Unmarshal([]byte(body), &f2)
	CheckError(err)
	f2.Showmul()
}
func jsonTest() {
	//解析固定结构的json
	st := &Student{
		"Xiao Ming",
		16,
		true,
		[]string{"Math", "English", "Chinese"},
		9.99,
	}
	st1, err := json.Marshal(st)
	fmt.Println(string(st1))
	CheckError(err)
	stb := &Student{}
	err = json.Unmarshal([]byte(st1), &stb)
	stb.ShowStu()
	//
	//b := []byte(`{1:"Wednesday",2:6,3:["Gomez","Morticia"]}`)
	////解析未知结构的json
	//var f interface{}
	//err = json.Unmarshal(b, &f)
	//CheckError(err)
	//这是f里面存储的是一个键值对的map
	//f = map[string]interface{}{
	//	"Name": "Wednesday",
	//	"Age": 6,
	//	"Parents": []interface{}{
	//		"Gomez",
	//		"Morticia",
	//	},
	//}
	//m := f.(map[interface{}]interface{})
	//for k, v := range m {
	//	switch vv := v.(type) {
	//	case string:
	//		fmt.Println(k, "is string", vv)
	//	case int:
	//		fmt.Println(k, "is int", vv)
	//	case float64:
	//		fmt.Println(k, "is float64", vv)
	//	case []interface{}:
	//		fmt.Println(k, "is an array:")
	//		for i, u := range vv {
	//			fmt.Println(i, u)
	//		}
	//	default:
	//		fmt.Println(k, "is of a type I don't know how to handle")
	//	}
	//}
}
func CheckError(err error) {
	if err != nil {
		fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
		os.Exit(1)
	}
}

有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:nazhizq

查看原文:golang入门案例之http client请求

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1336 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏