golang(10):web开发 & 连接数据库

http编程

1) Go原生支持 http : import ("net/http")
2) Go 的 http 服务性能和 nginx 比较接近
3) 几行代码就可以实现一个 web 服务

http 服务端

// 示例代码:
package main

import (
    "fmt"
    "net/http"
)

func Hello(w http.ResponseWriter, r *http.Request){
    fmt.Println("hello world\n")
    fmt.Fprintf(w,"hello world")    // 返回响应
}

func main(){
    http.HandleFunc("/",Hello)        // 路由;第一个参数是路径,第二个参数是视图函数
    err := http.ListenAndServe("0.0.0.0:8080",nil)        // 监听并等待请求
    if err != nil{
        fmt.Println("http listened failed")
    }
}

http 客户端

// 示例代码:
package main

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

func main(){
    ret,err := http.Get("https://www.baidu.com/")    // 向一个服务器发送 GET 请求;返回的数据都在 ret.Body 里面
    if err != nil {
        fmt.Println("get err:",err)
        return
    }

    data,err := ioutil.ReadAll(ret.Body)    // 返回的数据都在 ret.Body 里面
    if err != nil {
        fmt.Println("get data err:",err)
        return
    }

    fmt.Printf("Type:%T\n",data)
    fmt.Println(string(data))
}

// 运行结果:
[[email protected] example01_http_client]# go run main/main.go
Type:[]uint8
<html>
<head>
    <script>
        location.replace(location.href.replace("https://","http://"));
    </script>
</head>
<body>
    <noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>
</body>
</html>
[[email protected] example01_http_client]# 

http常见请求方法

1)Get请求
2)Post请求
3)Put请求
4)Delete请求
5)Head请求        -- > 只请求页面的头部

发送 HEAD 请求

// 示例代码:
package main

import (
    "fmt"
    "net/http"
)

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

func main(){
    for _,v := range urls{
        resp,err := http.Head(v)    // 发送 Head 请求
        if err != nil {
            fmt.Printf("head %s failed,err:%v\n",v,err)
            continue
        }
        fmt.Printf("head success,status:%v\n",resp.Status)        // resp.Status --> 状态码
    }
}

// 运行结果:
[[email protected] example01_http_head_request]# go run main/main.go
head success,status:200 OK
head http://www.google.com failed,err:Head http://www.google.com: dial tcp 75.126.2.43:80: connect: connection timed out
head success,status:200 OK
[[email protected] example01_http_head_request]# 

// 自定义超时时间
// 示例代码:
package main

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

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

func main(){
    for _,v := range urls{
        c := http.Client{        // 自定义客户端
            Transport: &http.Transport{
                Dial: func(network, addr string) (net.Conn, error){
                    timeout := time.Second * 2        // 自定义超时时间
                    return net.DialTimeout(network, addr, timeout)
                },
            },
        }    

        start := time.Now()
        resp,err := c.Head(v)    // 用自定义的客户端发送请求
        end := time.Now()
        interval := end.Sub(start)
        fmt.Println("interval:",interval)
        //resp,err := http.Head(v)    // 发送 Head 请求
        if err != nil {
            fmt.Printf("head %s failed,err:%v\n",v,err)
            continue
        }
        fmt.Printf("head success,status:%v\n",resp.Status)        // resp.Status --> 状态码
    }
}

// 运行结果:
[[email protected] example01_http_head_request]# go run main/main.go
interval: 171.062376ms
head success,status:200 OK
interval: 2.000789206s
head http://www.google.com failed,err:Head http://www.google.com: dial tcp 69.63.184.142:80: i/o timeout
interval: 749.542763ms
head success,status:200 OK
[[email protected] example01_http_head_request]# 

http 常见状态码:

http.StatusContinue = 100
http.StatusOK = 200
http.StatusFound = 302
http.StatusBadRequest = 400
http.StatusUnauthorized = 401
http.StatusForbidden = 403
http.StatusNotFound = 404
http.StatusInternalServerError = 500

表单处理:

// 示例代码:
package main
import (
    "io"
    "net/http"
)

// 常量 form 是一段 html 代码
const form = `<html><body><form action="#" method="post" name="bar">
                    <input type="text" name="in"/>
                    <input type="text" name="in"/>
                     <input type="submit" value="Submit"/>
             </form></html></body>`

func SimpleServer(w http.ResponseWriter, request *http.Request) {        // 请求信息都在 request 中
    io.WriteString(w, "<h1>hello, world</h1>")        // 返回给客户端一段html代码
}

func FormServer(w http.ResponseWriter, request *http.Request) {
    w.Header().Set("Content-Type", "text/html")            // w.Head().Set(key,val)  --->  设置响应头
    switch request.Method {                                // request.Method --> 请求方法
    case "GET":
        io.WriteString(w, form)            // 把 form 表单返回给客户端
    case "POST":
        request.ParseForm()        // 需要先解析表单
        io.WriteString(w, request.Form["in"][0])        // request.Form["in"]    是一个数组
        io.WriteString(w, "\n")
        io.WriteString(w, request.FormValue("in"))        // request.FormValue("in")  ---> 获取表单中的值(name重复时,取最近的一个);推荐使用这个
    }
}
func main() {
    http.HandleFunc("/test1", SimpleServer)
    http.HandleFunc("/test2", FormServer)
    if err := http.ListenAndServe(":8088", nil); err != nil {
    }
}

原文地址:https://www.cnblogs.com/neozheng/p/11355592.html

时间: 2024-10-17 21:07:06

golang(10):web开发 & 连接数据库的相关文章

10款Web开发最佳的Python框架

Python是跻身于当代IT世界最流行和代码最高效的编程语言之一.Python框架能帮助你快速启动Web应用. 1.CubicWeb CubicWeb的最重要的功能是其代码的可重用性,由一个个代码单元组成.它灵活又强大,并且还有一些特别的功能,包括RQL查询语言和支持有效编码的语义视图功能.这是语义Web应用程序的最佳解决方案,并且提供理想的环境. 作为一个程序员,我们必须了解Python这门编程语言的灵活和强大.框架的选择取决于Web应用程序的使用目的和复杂程度.测量项目所需的负荷.可扩展性和

Web开发人员常犯的10个错误

说到开发一个运行在现代网络中的网站:Web开发人员需要选择虚拟主机平台和底层数据存储,准备编写HTML.CSS和JavaScript用的工具,要有设计执行方式,以及一些可用的JavaScript库/框架.在将任务分解为这几步之后,接下来要做的就简单多了,可以去网上找文章,浏览论坛,看看那些能提供更好的Web体验提示的示例. 然而不管是走哪条路,犯错却是每一个开发人员都不可避免的.虽然有些错误与某一个具体的行为相关,但有些错误却是所有Web开发人员都需要面对的挑战.因此,通过研究,体验和观察,我总

Web 开发中很实用的10个效果【附源码下载】

在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记得收藏:) 超炫的页面切换动画效果 今天我们想与大家分享一组创意的页面切换熊效果集合.我们已经在示例中罗列了一组动画,可以被应用到页面切换过程中,创造出很有趣的导航效果. 立即下载      在线演示 美!视差滚动在图片滑块中的应用 视差滚动(Parallax Scrolling)已经被广泛应用于网

2015年10个最佳Web开发JavaScript库

2015年10个最佳Web开发JavaScript库 现在的互联网可谓是无所不有,有大量的JavaScript项目开发工具充斥于网络中.我们可以参考网上的指导来获取构建代码项目的各种必要信息.如果你是搞Web开发的,那么大多更喜欢支持前端开发的JavaScript.此脚本语言使用相对比较容易,并能为网站和Web应用创造了有趣的用户界面.下面是10个最佳的可用于Web项目开发的JavaScript库. 1. IO.js: IO.js是一个以Chrome V8  runtime为引擎的JavaScr

【转载】Web 开发中很实用的10个效果【附源码下载】

超炫的页面切换动画效果 今天我们想与大家分享一组创意的页面切换熊效果集合.我们已经在示例中罗列了一组动画,可以被应用到页面切换过程中,创造出很有趣的导航效果. 立即下载      在线演示 美!视差滚动在图片滑块中的应用 视差滚动(Parallax Scrolling)已经被广泛应用于网页设计中,这种技术能够让原本平面的网页界面产生动感的立体效果.美女很养眼吧 :) 源码下载      在线演示 网页边栏过渡动画 以细微的过渡动画显示一些隐藏的侧边栏,其余的内容也是.通常侧边栏滑入,把其他内容推

10个用于Web开发的最好 Python 框架

Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还自带服务器.其它方面,Python拥有足够多的免费数据函数库.免费的Web网页模板系统.还有与Web服务 器进行交互的库.这些都可以设计到你的Web应用程序里面.在这篇文章里,我们将为Python Web开发者介绍基于Python的10大Web应用框架. CubicWeb CubicWeb的最重要的

Web 开发中很实用的10个效果

在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记得收藏! 超炫的页面切换动画效果 今天我们想与大家分享一组创意的页面切换熊效果集合.我们已经在示例中罗列了一组动画,可以被应用到页面切换过程中,创造出很有趣的导航效果. 在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是

【web开发】☆★之利用POI操作Excel表格系列教程【10】单元格填充色和颜色操作

[web开发]☆★之利用POI操作Excel表格系列教程[10]单元格填充色和颜色操作 package csg.xiaoye.poidemo; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import

编程开发必读书籍:每个Web开发人员都应该阅读的10本书[图]

编程开发必读书籍:每个Web开发人员都应该阅读的10本书[图]:当开发人员问我他们应该阅读哪些书籍的时候,我通常都是告诉他们:让你读的下去的书.许多开发人员会阅读其他人的代码,实际上你提升自己最好的途径就是阅读,你的读书效率越高,那么你在日常工作中的效率也会越高.本文我们将来讨论:每个Web开发人员都应该阅读的10本书:1.<与爱因斯坦月球漫步>为什么推荐一本记忆力训练相关的书籍呢?因为现在的绝大多数开发人员都没有想过要提高自己的记忆能力,结果全部依赖于移动设备,实际上,现如今的程序员很难在脱