web基础_0x01_Go搭建一个Web服务器

前面已经介绍了Web是基于HTTP协议的一个服务,Go语言里面提供了一个完善的net/http包,通过HTTP包可以很方便的就搭建起来一个可以运行的web服务。同时使用这个包能很简单的对web的路由,静态文件,模板,cookie等数据进行设置和操作。

http包建立Web服务器


package main

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

func sayhello(w http.ResponseWriter, r *http.Request){
  r.ParseForm()  //解析参数,默认是不会解析的
  fmt.Print(r.Form)  //这些信息是输出到服务器端的打印信息
  fmt.Print("path",r.URL.Path)
  fmt.Print("scheme",r.URL.Scheme)
  fmt.Print(r.Form["url_log"])
  for k,v := range r.Form{
    fmt.Println("key:",k)
    fmt.Println("val:",strings.Join(v,""))
  }
  fmt.Fprintf(w,"Hello astaxie!") //这个写入到w的是输出到客户端的
}

func main(){
  http.HandleFunc("/",sayhello) //设置访问的路由
  err := http.ListenAndServer(":9090",nil)  //设置监听的端口
  if err!=nil{
    log.Fatal("ListenAndServe:",err)
}
}

  

上面这个代码,我们build之后,然后执行web.exe,这个时候其实已经在9090端口监听http链接请求了。

在浏览器输入 http://localhost:9090

可以看到浏览器页面输出了 Hello astaxie!

可以换一个地址试试: http://localhost:9090/?url_long=111&url_long=222

我们看到上面的代码,要表写一个Web服务器很简单,只要调用http包的两个函数就可以了。

如果你以前是PHP程序员,也许会问,我们的Nginx,Apache服务器不需要吗?Go就是不需要这些,因为它直接就监听tcp端口了,做了Nginx做的事情,然后sayhello这个其实就是我们写的逻辑函数了,根php里面的控制层(controller)函数类似。

如果你以前是Python程序员,那么你一定听说过tornado,这个代码和它很像,Go就是拥有类似Python这样动态语言的特性,写web应用很方便。

如果你以前是Ruby程序员,会发现和ROR的/script/server启动有点类似。

我们看到Go通过简单的几行代码就已经运行起来一个web服务了,而且这个微博服务内部有支持高并发的特性,我们将会在下面的内容里详细介绍一下Go是如何实现web高并发的。

 

上一篇:0x01 - 我的第一个 Object Visitor


下一篇:0x01