• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go web编程实例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1. go web编程入门

记录个web编程例子方便以后使用。
主要有:

  • chan的使用(带缓存,不带缓存)
  • client发起get/post请求
  • server解析get/post请求参数
  • http.HandleFunc 根据请求uri设置对应处理func

2. server.go, 参数解析返回

package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"os/signal"
	"strings"
)

func getHandler(w http.ResponseWriter, req *http.Request) {
	vars := req.URL.Query()	//解析参数
	for _, v := range vars {	//遍历每个参数
		res := fmt.Sprintf("%v", v)
		io.WriteString(w, "par val:"+res+"\n")
	}
}

func postHandler(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()       //解析参数,默认是不会解析的
	fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息
	fmt.Println("path", r.URL.Path)
	fmt.Println(r.Form["url_long"])
	for k, v := range r.Form {
		fmt.Println("key:", k)
		fmt.Println("val:", strings.Join(v, ""))
	}
	fmt.Fprintf(w, "postHandler") //这个写入到w的是输出到客户端的
}

func main() {
	//channel 用于优雅退出
	c := make(chan os.Signal)
	signal.Notify(c, os.Interrupt, os.Kill)

	//定义2个处理函数
	http.HandleFunc("/get", getHandler)
	http.HandleFunc("/test", postHandler)

	//服务启动
	http.ListenAndServe(":12365", nil)

	//阻塞等待信号
	s := <-c
	fmt.Println("退出信号", s)
}

3. client.go, 发起http get/post请求

package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
)

func exec_http_get(res chan string) {
	resp, err := http.Get("http://127.0.0.1:12365/get?url_long=long&id=12")
	if err != nil {
		//err
	}

	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		//err
	}

	res <- string(body)
}

func exec_http_post(res chan string) {
	resp, err := http.PostForm("http://127.0.0.1:12365/test",
		url.Values{"key": {"Value"}, "id": {"123"}})

	if err != nil {
		//request err
	}

	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		// handle error
	}

	res <- string(body)
}

func main() {
	c := make(chan string, 2)
	//发送get/post请求
	go exec_http_get(c)
	go exec_http_post(c)

	//查看结果
	for i := 0; i < 2; i=i+1{
		res := <-c
		fmt.Printf("结果: %v\n", res)
	}
}

4. 参考


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
hdu3715GoDeeper2-sat发布时间:2022-07-10
下一篇:
go中利用常驻内存特性(包变量)实现简单的文件锁发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap