使用golang的标准库搭建网站--1.从最简单的页面开始

一、写在前面

之前用beego做了几个网站,觉得beego确实非常好用,大大简化了web的开发,但总是使用现成的框架,而不了解其背后的技术,感觉总是无法提高,这篇文章不是去分析beego的源代码,那个有点复杂了,而是仅仅使用go的标准库,将页面跑起来,来了解go的标准库是如何工作的的,我从做简单的页面开始,一步一步的实现那些框架所实现的东西:自定义路由,模板解析,模板函数,静态文件的处理,以及cookie和session的实现等等,最终我将只依赖标准库实现一个文件分享的网站,将其中的流程,细节,遇到的问题以及解决办法整理出来,和大家分享学习,如果有出错的地方,欢迎和我分享交流。

二、从最简单的页面开始

    package main

    import (
        "fmt"
        "net/http"  //搭建web服务很重要的一个包
    )

    func Index(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello world, this is my first page!")
    }

    func main() {
        http.HandleFunc("/", Index)
        // 监听本机的8080端口
        err := http.ListenAndServe(":8080", nil)

        if err != nil {
            fmt.Println("Error: ", err)
        }
    }

使用go run main.go运行一下
然后打开浏览器输入http://localhost:8080
就能看到页面输出的结果(不要在意那个图标,那是历史遗留问题,和本文无关):
使用golang的标准库搭建网站--1.从最简单的页面开始_第1张图片

是不是很简单,我们无需了解底层的细节,就能借助golang的标准库将我们的页面跑起来。

三、上面的过程背后都做了些什么

我们来简单的了解一下,上面的代码都做了哪些事。
至于golang的语法,这里就不展开细讲了,不熟悉的朋友建议先把语法好好看一看。

  1. 首先来看 http.HandleFunc(“/”, Index) 这句,这句的意思就是注册路由,当客户端请求根页面的时候,交由Index函数去处理。
    函数声明如下:

    func HandleFunc(pattern string, handler func(ResponseWriter, *Request))

    第一个参数 pattern 就是要匹配的路由,比如 “/” 用来匹配首页,
    第二个参数是一个函数func(ResponseWriter, *Request)
    所以在写自定义处理函数的时候得按照这种格式:
    func Index(w http.ResponseWriter, r *http.Request)
    这个函数将会由标准库去调用。
    参数列表中的w是用于向客户端发送数据的而r是从客户端接收到的数据,服务器与客户端的所有交互都要依赖这两个参数,想深入了解的朋友可以去查看手册,这里就不赘述了。

  2. 接下来就是监听端口8080端口,并启动服务,golang为我们实现了一个完整的服务器,就像apache和nginx了,当然了功能肯定没有那么强大,很多东西需要我们自己来实现,所以编译好的go web程序并不依赖apache或者nginx,大大方便了程序的部署。

  3. 虽然只有短短的几行代码,但却实现了高并发,每个请求都是通过独立的goroutine去服务的,互不干扰。


这篇文章的内容虽然比较简单,但他是后面一系列文章的开始和基础,在后面的文章中,我将会更加深入的一步一步将一个完整的网站跑起来。

你可能感兴趣的:(golang)