应用Go语言完成微信公众平台

by admin on 2019年5月30日

正文实例讲述了golang分析xml的主意。分享给我们供我们参谋,具体如下:

本文实例讲述了Go语言Web编制程序达成Get和Post请求发送与深入分析的办法。分享给大家供大家参谋,具体如下:

那个不是整整的代码哦,只是3个示范能够评释跟接受post传过来的消息还要能回到音讯,中间的回涨逻辑就待索要各位同志们团结写了哈

正文实例讲述了golang操作mongodb的方法。分享给大家供我们参考。具体达成方式如下:

golang剖析xml真是好用,极其是struct属性的tag让程序轻便了累累,其他产生语言要求特别类别的在golang里一贯运用tag舒服

那是1篇入门小说,通过1个简练的例子介绍Golang的Web编制程序主要选拔的技能。

复制代码 代码如下:

复制代码 代码如下:

xml文件点击这里本站下载.rar)。

作品结构包蕴:

/*
 *@go言语完结公众平台
 */
package main
import (
 “crypto/sha1”
 “encoding/xml”
 “fmt”
 “io”
 “io/ioutil”
 “log”
 “net/http”
 “sort”
 “strings”
 “time”
)
type Request struct {
 ToUserName   string
 FromUserName string
 CreateTime   time.Duration
 MsgType      string
 Content      string
 MsgId        int
}
type Response struct {
 ToUserName   string `xml:”xml>ToUserName”`
应用Go语言完成微信公众平台。 FromUserName string `xml:”xml>FromUserName”`
 CreateTime   string `xml:”xml>CreateTime”`
 MsgType      string `xml:”xml>MsgType”`
 Content      string `xml:”xml>Content”`
 MsgId        int    `xml:”xml>MsgId”`
}
func str2sha1(data string) string {
 t := sha1.New()
 io.WriteString(t, data)
 return fmt.Sprintf(“%x”, t.Sum(nil))
}
func action(w http.ResponseWriter, r *http.Request) {
 postedMsg, err := ioutil.ReadAll(r.Body)
 if err != nil {
  log.Fatal(err)
 }
 r.Body.Close()
 v := Request{}
 xml.Unmarshal(postedMsg, &v)
 if v.MsgType == “text” {
  v := Request{v.ToUserName, v.FromUserName, v.CreateTime, v.MsgType,
v.Content, v.MsgId}
  output, err := xml.MarshalIndent(v, ” “, ” “)
  if err != nil {
   fmt.Printf(“error:%v\n”, err)
  }
  fmt.Fprintf(w, string(output))
 } else if v.MsgType == “event” {
  Content := `”欢迎关切
        笔者的微信”`
  v := Request{v.ToUserName, v.FromUserName, v.CreateTime, v.MsgType,
Content, v.MsgId}
  output, err := xml.MarshalIndent(v, ” “, ” “)
  if err != nil {
   fmt.Printf(“error:%v\n”, err)
  }
  fmt.Fprintf(w, string(output))
 }
}
func checkSignature(w http.ResponseWriter, r *http.Request) {
 r.ParseForm()
 var token string = “你的token”
 var signature string = strings.Join(r.Form[“signature”], “”)
 var timestamp string = strings.Join(r.Form[“timestamp”], “”)
 var nonce string = strings.Join(r.Form[“nonce”], “”)
 var echostr string = strings.Join(r.Form[“echostr”], “”)
 tmps := []应用Go语言完成微信公众平台。string{token, timestamp, nonce}
 sort.Strings(tmps)
 tmpStr := tmps[0] + tmps[1] + tmps[2]
 tmp := str2sha1(tmpStr)
 if tmp == signature {
  fmt.Fprintf(w, echostr)
 }
}
func main() {
 http.HandleFunc(“/check”, checkSignature)
 http.HandleFunc(“/”, action)
 http.ListenAndServe(“:8080”, nil)
}

package main
import (
    “fmt”
    “launchpad.net/mgo”
    “launchpad.net/mgo/bson”
)
type Mail struct {
    Id bson.ObjectId “_id”
    Name string
    Email string
}
func main() {
    // 连接数据库
    session, err := mgo.Dial(“127.0.0.1”)
    if err != nil {
        panic(err)
    }
    defer session.Close()
    // 获取数据库,获取集结
    c := session.DB(“test”).C(“mail”)
    // 存款和储蓄数据
    m1 := Mail{bson.NewObjectId(), “user1”, “user1@dotcoo.com”}
    m2 := Mail{bson.NewObjectId(), “user1”, “user2@dotcoo.com”}
    m3 := Mail{bson.NewObjectId(), “user3”, “user3@dotcoo.com”}
    m4 := Mail{bson.NewObjectId(), “user3”, “user4@dotcoo.com”}
    err = c.Insert(&m1, &m2, &m3, &m4)
    if err != nil {
        panic(err)
    }
    // 读取数据
    ms := []Mail{}
    err = c.Find(&bson.M{“name”:”user3″}).All(&ms)
    if err != nil {
        panic(err)
    }
    // 呈现数据
    for i, m := range ms {
        fmt.Printf(“%s, %d, %s\n”, m.Id.Hex(), i, m.Email)
    }
}

1体化示例代码:

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

您只怕感兴趣的作品:

  • Go语言中的Array、Slice、Map和Set使用详解
  • Go语言完结轻松的贰个静态WEB服务器
  • GO语言并发编制程序之互斥锁、读写锁详解
  • ubuntu下搭建Go语言(golang)环境
  • GO语言(golang)基础知识
  • 浅谈Go语言中字符串和数组
  • GO 语言学习指南

期待本文所述对大家的Go语言程序设计具备支持。

复制代码 代码如下:

在数额的卷入中,大家一些行使了json,因此本文也论及到Golang中json的编码和平解决码。

你或者感兴趣的篇章:

  • Golang对MongoDB数据库的操作简易包装教程

package main
import (
    “os”
    “encoding/xml”
    // “encoding/json”
    “io/ioutil”
    “fmt”
)
type Location struct {
    CountryRegion []CountryRegion
}
type CountryRegion struct {
    Name string `xml:”,attr”`
    Code string `xml:”,attr”`
    State []State
}
type State struct {
    Name string `xml:”,attr”`
    Code string `xml:”,attr”`
    City []City
}
type City struct {
    Name string `xml:”,attr”`
    Code string `xml:”,attr”`
    Region []Region
}
type Region struct {
    Name string `xml:”,attr”`
    Code string `xml:”,attr”`
}
func main() {
    f, err := os.Open(“LocList.xml”)
    if err != nil {
        panic(err)
    }
    data, err := ioutil.ReadAll(f)
    if err != nil {
        panic(err)
    }
    // v := make(map[string]interface{})
    var v Location
    err = xml.Unmarshal(data, &v)
    if err != nil {
        panic(err)
    }
    // fmt.Printf(“%#v\n”, v)
    // table
    for _, countryRegion := range v.CountryRegion {
        // fmt.Printf(“%s,%s\n”, countryRegion.Code,
countryRegion.Name)
        if len(countryRegion.State) == 0 {
            continue
        }
        for _, state := range countryRegion.State {
            // fmt.Printf(“%s,%s,%s\n”, countryRegion.Code, state.Code,
state.Name)
            if len(state.City) == 0 {
                continue
            }
            for _, city := range state.City {
                // fmt.Printf(“%s,%s,%s,%s\n”, countryRegion.Code,
state.Code, city.Code, city.Name)
                if len(city.Region) == 0 {
                    continue
                }
                for _, region := range city.Region {
                    fmt.Printf(“%s,%s,%s,%s,%s\n”, countryRegion.Code,
state.Code, city.Code, region.Code, region.Name)
                }
            }
        }
    }
    // // json
    // js, err := json.Marshal(&v.CountryRegion[0])
    // if err != nil {
    //  panic(err)
    // }
    // fmt.Printf(“%s\n”, js)
}

一、Client-Get

愿意本文所述对我们Go语言程序设计具备帮助。

复制代码 代码如下:

你大概感兴趣的篇章:

  • 动用go语言深入分析xml的落到实处格局(必须要看篇)

package main
import (
        “fmt”
        “net/url”
        “net/http”
        “io/ioutil”
        “log”
)
func main() {
        u, _ := url.Parse(“”)
        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(“”,
“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[bf88必发唯一官网,”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语言程序设计有着帮忙。

你大概感兴趣的稿子:

  • 基于Django U福特ExplorerL传参 FO奥德赛M表单传数据 get
    post的用法实例
  • Go语言中应用http发起Get和Post请求的秘诀言传身教
  • Go语言服务器开垦达成最简便HTTP的GET与POST接口
  • Go语言开荒发送Get和Post请求的示范

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图