前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang之http编程

Golang之http编程

作者头像
超蛋lhy
发布2018-08-31 15:45:10
4300
发布2018-08-31 15:45:10
举报
文章被收录于专栏:PythonistaPythonista
代码语言:javascript
复制
Go原生支持http。import("net/http")
Go的http服务性能和nginx比较接近
几行代码就可以实现一个web服务

服务端http

代码语言:javascript
复制
package main

import (
    "fmt"
    "net/http"
)

func Hello(w http.ResponseWriter, r *http.Request) {
    fmt.Println("handle hello")
    fmt.Fprintf(w, "hello")
}
func Login(w http.ResponseWriter, r *http.Request) {
    fmt.Println("handle login")
    fmt.Fprintf(w, "login....")
}


func main() {
    http.HandleFunc("/", Hello)
    http.HandleFunc("/user/login", Login)
    err := http.ListenAndServe("127.0.0.1:8800", nil)
    if err != nil {
        fmt.Println("htpp listen failed")
    }
}

http客户端

代码语言:javascript
复制
package main

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

func main() {
    res, err := http.Get("https://www.baidu.com/")
    if err != nil {
        fmt.Println("get err:", err)
        return
    }
    data, err := ioutil.ReadAll(res.Body)
    if err != nil {
        fmt.Println("get data err:", err)
        return
    }
    fmt.Println(string(data))
}

http_head

代码语言:javascript
复制
package main

import (
    "fmt"
    "net/http"
)

var url = []string{
    "http://www.baidu.com",
    "http://google.com",
    "http://taobao.com",
}

func main() {
    for _, v := range url {
        res, err := http.Head(v)
        if err != nil {
            fmt.Printf("head %s failed,err:%v\n", v, err)
            continue
        }
        fmt.Printf("head succ,status:%v\n", res.Status)
    }
}

http_head自定义超时写法

代码语言:javascript
复制
package main

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

var url = []string{
    "http://www.baidu.com",
    "http://google.com",
    "http://taobao.com",
}

func main() {
    for _, v := range url {
        //超时写法
        c := http.Client{
            Transport: &http.Transport{
                Dial: func(network, addr string) (net.Conn, error) {
                    timeout := time.Second * 2
                    return net.DialTimeout(network, addr, timeout)
                },
            },
        }
        resp, err := c.Head(v)
        if err != nil {
            fmt.Printf("head %s failed,err:%v\n", v, err)
            continue
        }
        fmt.Printf("head succ,status:%v\n", resp.Status)
    }
}

 http_form写法

代码语言:javascript
复制

http_template,模板写法

代码语言:javascript
复制
package main

import (
    "fmt"
    "os"
    "text/template"
)

type Person struct {
    Name  string
    age   string
    Title string
}

func main() {
    t, err := template.ParseFiles("d:/project/src/go_dev/day10/http_form/index.html")
    if err != nil {
        fmt.Println("parse file err:", err)
        return
    }
    p := Person{Name: "Mary", age: "31", Title: "我的个人网站"}
    if err := t.Execute(os.Stdout, p); err != nil {
        fmt.Println("There was an error:", err.Error())
    }
}

index.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{.Title}}</title>
</head>
<body>
<p>hello,{{.Name}}</p>
<p>{{.}}</p>   
</body>
</html>

用例2:

代码语言:javascript
复制
package main

import (
    "fmt"
    "html/template"
    "io"
    "net/http"
)

var myTemplate *template.Template

type Result struct {
    output string
}

func (p *Result) Write(b []byte) (n int, err error) {
    fmt.Println("called by template")
    p.output += string(b)
    return len(b), nil
}

type Person struct {
    Name  string
    Title string
    Age   int
}

func userInfo(w http.ResponseWriter, r *http.Request) {
    fmt.Println("handle hello")
    //fmt.Fprintf(w,"hello")
    var arr []Person
    p := Person{Name: "Mary001", Age: 10, Title: "我的网站"}
    p1 := Person{Name: "Mary002", Age: 10, Title: "我的个人网站"}
    p2 := Person{Name: "Mary003", Age: 10, Title: "我的网站2"}
    arr = append(arr, p)
    arr = append(arr, p1)
    arr = append(arr, p2)

    resultWriter := &Result{}
    io.WriteString(resultWriter, "hello world")
    err := myTemplate.Execute(w, arr)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("template render data:", resultWriter.output)
    //myTemplate.Execute(w, p)
    //myTemplate.Execute(os.Stdout, p)
    //file, err := os.OpenFile("C:/test.log", os.O_CREATE|os.O_WRONLY, 0755)
    //if err != nil {
    //    fmt.Println("open failed err:", err)
    //    return
    //}
}
func initTemplate(filename string) (err error) {
    myTemplate, err = template.ParseFiles(filename)
    if err != nil {
        fmt.Println("parse file err:", err)
        return
    }
    return
}
func main() {
    initTemplate("d:/project/src/go_dev/day10/template_http/index.html")
    http.HandleFunc("/user/info", userInfo)
    err := http.ListenAndServe("127.0.0.1:8880", nil)
    if err != nil {
        fmt.Println("http listen failed")
    }
}
代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
<p>hello world</p>
<table border="1">
{{range .}}
    <tr>
        <td>{{.Name}}</td> <td>{{.Age}}</td><td>{{.Title}}</td>
    </tr>
{{end}}
</table>
</body>
</html>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 服务端http
  • http客户端
  • http_head
  • http_head自定义超时写法
  •  http_form写法
  • http_template,模板写法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档