《go web 编程》第三章 web基础:http 包建立 We
2022-08-16 本文已影响0人
bycall
package main
import (
"fmt"
"net/http"
"strings"
"log"
)
func sayhelloName(w http.ResponseWriter, r *http.Request) {
r.ParseForm() // 解析参数,默认是不会解析的
fmt.Println(r.Form) // 这些信息是输出到服务器端的打印信息
fmt.Println("path", r.URL.Path)
fmt.Println("scheme", r.URL.Scheme)
fmt.Println(r.Form["url_long"])
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("/", sayhelloName) // 设置访问的路由
err := http.ListenAndServe(":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 之后服务器端打印的信息看到上面的代码,要编写一个 Web 服务器很简单,只要调用 http 包的两个函数就可以了。
如果你以前是 PHP 程序员,那你也许就会问,我们的 nginx、apache 服务器不需要吗?Go 就是不需要这些,因为他直接就监听 tcp 端口了,做了 nginx 做的事情,然后 sayhelloName 这个其实就是我们写的逻辑函数了,跟 php 里面的控制层(controller)函数类似。
如果你以前是 Python 程序员,那么你一定听说过 tornado,这个代码和他是不是很像,对,没错,Go 就是拥有类似 Python 这样动态语言的特性,写 Web 应用很方便。
如果你以前是 Ruby 程序员,会发现和 ROR 的 /script/server 启动有点类似。