如果你已经对我以前的辅导教程都有过学习或者有这样的知识,那么你应该可以开始基于Go语言的Web编程了。

网络服务总是在等待用户电脑的连接、请求,并根据用户的请求进行一些处理之后返回用户需要的数据给用户,用户通过URL地址访问网络服务,每一个URL都是唯一的,它代表着网络上的某一个资源,比如你现在看到本文,它的URL地址就对应着这篇文章,不会是别的。

我们的Go语言Web编程的Hello World程序,将运行在本地电脑上,并且会监听9999端口,也就是说,当你打开浏览器,在地址栏里面输入 http://localhost:9999 的时候,就可以访问到我们的这个程序。

package main

import (
    "net/http"
    "fmt"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Println("Inside hanler")
    fmt.Fprintf(w, "Hello World from my Go Program!")
}

func main() {
    http.HandleFunc("/", handler) // 生定向所有URL到 handler 函数
    http.ListenAndServe("localhost:9999", nil) // 监听来自9999端口的连接请求
}

运行它之后,程序将不会有任何显示,但是你可以打开浏览器,在地址栏中输入http://localhost:9999,可以在网页中看到“Hello World from my Go Program!”,这表示你的Web程序已经开始服务了,而这个时候你返回去看运行它的终端,每一次对网页的访问,都会打印出几个“Inside hanler”字符。

现在让我们来分析一下下我们在代码都具体做了什么:

  • 像任何其它的Go程序一样,要想让程序可以执行,那么必须有一个 main 函数
  • 为了在终端打印一些信息,所以我们像其它的示例一样,导入了fmt 包
  • 我们导入了与Web http协议相关的包 http*,所有与该包相关的函数我们都以 *http.FuncName的形式调用。
  • 在 main 函数中,我们将所有的请求都转发给 handler 函数,接着我们呼叫 http.HandleFunc 方法,并且传递了两人个参数,第一个参数为请求的URL地址,第二个为处理该URL请求的函数。
  • 我们使用 http.ListenAndServer() 方法打开服务程序,并且监听了 localhost:9999
  • 当我们打开浏览器访问 *http://localhost:9999*的时候,程序返回了“Hello World from my Go Program!”字符串。
  • 从 http.Request 你可以获取关于当次请求的所有细节,比如URL地址,或者用户输入的数据等。
  • 你应该使用接收到的 http.ResponseWriter 指针来发送需要返回给客户的内容。
  • 代码 *http.HandleFunc(“/”, handler) 表示所有针对该地址的请求都将转发给 *handler*函数

现在让我们对上面的示例程序稍稍地扩展一下,让它可以接收一些用户的数据,然后将用户输入的数据展示给用户:

package main

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

func helloHandler(w http.ResponseWriter, r *http.Request) {
    remPartOfURL := r.URL.Path[len("/hello/"):] //获取 URL 地址中 /hello/ 部分之后的所有内容
    fmt.Fprintf(w, "Hello %s", remPartOfURL)
}

func shouthelloHandler(w http.ResponseWriter, r *http.Request) {
    remPartOfURL := r.URL.Path[len("/shouthello/"):] // 同上
    fmt.Fprintf(w, "Hello %s!", strings.ToUpper(remPartOfURL))
}

func main() {
    http.HandleFunc("/hello/", helloHandler)
    http.HandleFunc("/shouthello/", shouthelloHandler)
    http.ListenAndServe("localhost:9999", nil)
}

现在,运行该程序,然后访问下面这些地址看看:

标签: none

评论已关闭