全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Go语言Web编程实现Get和Post请求发送与解析的方法详解

本文实例讲述了Go语言Web编程实现Get和Post请求发送与解析的方法。分享给大家供大家参考,具体如下:

这是一篇入门文章,通过一个简单的例子介绍Golang的Web编程主要用到的技术。

文章结构包括:

1. Client-Get 请求
2. Client-Post 请求
3. Server 处理 Get 和 Post 数据

在数据的封装中,我们部分采用了json,因而本文也涉及到Golang中json的编码和解码。

一、Client-Get
复制代码 代码如下:package main
import (
        "fmt"
        "net/url"
        "net/http"
        "io/ioutil"
        "log"
)
func main() {
        u, _ := url.Parse("http://localhost:9001/xiaoyue")
        q := u.Query()
        q.Set("username", "user")
        q.Set("password", "passwd")
        u.RawQuery = q.Encode()
        res, err := http.Get(u.String());
        if err != nil {
              log.Fatal(err) return
        }
        result, err := ioutil.ReadAll(res.Body)
        res.Body.Close()
        if err != nil {
              log.Fatal(err) return
        }
        fmt.Printf("%s", result)
}

二、Client-Post
复制代码 代码如下:package main
import (
        "fmt"
        "net/url"
        "net/http"
        "io/ioutil"
        "log"
        "bytes"
        "encoding/json"
)
type Server struct {
        ServerName string
        ServerIP   string
}
type Serverslice struct {
        Servers []Server
        ServersID  string
}
func main() {
        var s Serverslice
        var newServer Server;
        newServer.ServerName = "Guangzhou_VPN";
        newServer.ServerIP = "127.0.0.1"
        s.Servers = append(s.Servers, newServer)
        s.Servers = append(s.Servers, Server{ServerName: "Shanghai_VPN", ServerIP: "127.0.0.2"})
        s.Servers = append(s.Servers, Server{ServerName: "Beijing_VPN", ServerIP: "127.0.0.3"})
        s.ServersID = "team1"
        b, err := json.Marshal(s)
        if err != nil {
                fmt.Println("json err:", err)
        }
        body := bytes.NewBuffer([]byte(b))
        res,err := http.Post("http://localhost:9001/xiaoyue", "application/json;charset=utf-8", body)
        if err != nil {
                log.Fatal(err)
                return
        }
        result, err := ioutil.ReadAll(res.Body)
        res.Body.Close()
        if err != nil {
                log.Fatal(err)
                return
        }
        fmt.Printf("%s", result)
}

三、Server
复制代码 代码如下:package main
import (
        "fmt"
        "net/http"
        "strings"
        "html"
        "io/ioutil"
        "encoding/json"
)
type Server struct {
        ServerName string
        ServerIP   string
}
type Serverslice struct {
        Servers []Server
        ServersID  string
}
func main() {
        http.HandleFunc("/", handler)
        http.ListenAndServe(":9001", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
        r.ParseForm() //解析参数,默认是不会解析的
        fmt.Fprintf(w, "Hi, I love you %s", html.EscapeString(r.URL.Path[1:]))
        if r.Method == "GET" {
                fmt.Println("method:", r.Method) //获取请求的方法
                fmt.Println("username", r.Form["username"])
                fmt.Println("password", r.Form["password"])
                for k, v := range r.Form {
                        fmt.Print("key:", k, "; ")
                        fmt.Println("val:", strings.Join(v, ""))
                }
        } else if r.Method == "POST" {
                result, _:= ioutil.ReadAll(r.Body)
                r.Body.Close()
                fmt.Printf("%s\n", result)
                //未知类型的推荐处理方法
                var f interface{}
                json.Unmarshal(result, &f)
                m := f.(map[string]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")
                         }
                  }
                 //结构已知,解析到结构体
                 var s Serverslice;
                 json.Unmarshal([]byte(result), &s)
                 fmt.Println(s.ServersID);
                 for i:=0; i<len(s.Servers); i++ {
                         fmt.Println(s.Servers[i].ServerName)
                         fmt.Println(s.Servers[i].ServerIP)
                 }
        }
}

希望本文所述对大家Go语言程序设计有所帮助。


# Go语言  # Web编程  # Get  # Post  # 请求  # 发送  # 解析  # Go语言服务器开发实现最简单HTTP的GET与POST接口  # Go语言中利用http发起Get和Post请求的方法示例  # Go语言开发发送Get和Post请求的示例  # 详解Go语言中Get/Post请求测试  # 如何使用Golang发送Get和Post请求  # 这是  # 采用了  # 给大家  # 涉及到  # 所述  # 讲述了  # Set  # Query  # xiaoyue  # username  # passwd  # password  # user  # log  # ioutil  # io  # func  # localhost  # Parse  # RawQuery 


相关文章: 教程网站设计制作软件,怎么创建自己的一个网站?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  建站中国官网:模板定制+SEO优化+建站流程一站式指南  建站之星如何优化SEO以实现高效排名?  如何通过.red域名打造高辨识度品牌网站?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  宝塔建站助手安装配置与建站模板使用全流程解析  如何设计高效校园网站?  黑客入侵网站服务器的常见手法有哪些?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  成都网站制作报价公司,成都工业用气开户费用?  建站之星如何快速更换网站模板?  建站VPS选购需注意哪些关键参数?  宝塔面板创建网站无法访问?如何快速排查修复?  如何快速查询网址的建站时间与历史轨迹?  如何在IIS服务器上快速部署高效网站?  建站主机服务器选购指南:轻量应用与VPS配置解析  如何破解联通资金短缺导致的基站建设难题?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  制作宣传网站的软件,小红书可以宣传网站吗?  如何通过VPS建站无需域名直接访问?  如何在服务器上配置二级域名建站?  音响网站制作视频教程,隆霸音响官方网站?  济南专业网站制作公司,济南信息工程学校怎么样?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  建站之星logo尺寸如何设置最合适?  公司网站设计制作厂家,怎么创建自己的一个网站?  智能起名网站制作软件有哪些,制作logo的软件?  如何选择高效稳定的ISP建站解决方案?  如何基于PHP生成高效IDC网络公司建站源码?  制作企业网站建设方案,怎样建设一个公司网站?  焦点电影公司作品,电影焦点结局是什么?  C#如何在一个XML文件中查找并替换文本内容  孙琪峥织梦建站教程如何优化数据库安全?  如何高效完成独享虚拟主机建站?  如何通过虚拟主机快速完成网站搭建?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  北京网站制作网页,网站升级改版需要多久?  如何用花生壳三步快速搭建专属网站?  官网网站制作腾讯审核要多久,联想路由器newifi官网  如何确保西部建站助手FTP传输的安全性?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  ,石家庄四十八中学官网?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。