golang server示例

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

一个简单的web服务器

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe("localhost:8888", nil))
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Println("url.path is ", r.URL.Path)
}

简单看下Request结构体中几个重要成员

type Request struct {
    // Form contains the parsed form data, including both the URL
    // field's query parameters and the POST or PUT form data.
    // This field is only available after ParseForm is called.
    // The HTTP client ignores Form and uses Body instead.
    Form url.Values

    // PostForm contains the parsed form data from POST, PATCH,
    // or PUT body parameters.
    //
    // This field is only available after ParseForm is called.
    // The HTTP client ignores PostForm and uses Body instead.
    PostForm url.Values

    // MultipartForm is the parsed multipart form, including file uploads.
    // This field is only available after ParseMultipartForm is called.
    // The HTTP client ignores MultipartForm and uses Body instead.
    MultipartForm *multipart.Form
}

获取get参数

func handler(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    fmt.Println("value of param key is:", r.Form.Get("key"))
}

获取post参数

提交方式: application/x-www-form-urlencoded

func handler(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    fmt.Println("value of param key is:", r.PostFormValue("key"))
}

提交方式: json

type RequestParm struct {
    Name      string `json:"name"`
    Age       int    `json:"age"`
    ScoreList []int  `json:"score_list"`
}
// NewDecoder
func handler(w http.ResponseWriter, r *http.Request) {
    req := &RequestParm{}
    err := json.NewDecoder(r.Body).Decode(req)
    if err != nil {
        fmt.Println("json decode error")
        return
    }
    fmt.Println(req)
}
// Unmarshal
func handler(w http.ResponseWriter, r *http.Request) {
    req := &RequestParm{}

    body, err := ioutil.ReadAll(r.Body)
    if err != nil {
        panic(err)
    }

    err = json.Unmarshal(body, req)
    if err != nil {
        panic(err)
    }

    fmt.Println(req)
}

参考资料

四种常见的 POST 提交数据方式


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

本文来自:博客园

感谢作者:gattaca

查看原文:golang server示例

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

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