一、引入包、http包
1、package main
package main
小知识: 存放 main 函数的文件名称不一定是 main.go,也可以是任何其他合规的 go 文件名称,例如 app.go、index.go。一般推荐使用 main.go,因为直观。
2、import
我们使用 import 关键词用以引入程序所需的 Go 包。在 goblog 中,我们引入了两个 Go 标准库的包。
第一个是 fmt 包
fmt 是使用频率非常高的一个包。它是 format 的缩写,fmt 包含有格式化 I/O 函数。主要分为向外输出内容和获取输入内容两大部分。
fmt.Fprint(w, "<h1>Hello, 这里是 goblog</h1>")
fmt 的 Fprint 函数会将内容输出到实现了 io.Writer 接口类型的变量 w 中,我们通常用这个函数往文件中写入内容。注意,只要满足 io.Writer 接口的类型都支持写入。在我们的代码中 w 是 http.ResponseWriter 的实例,已经实现了 io.Writer 接口。
第二个是 net/http 包
标准库 net/http 提供了 HTTP 编程有关的接口,内部封装了 TCP 连接和报文解析的复杂琐碎细节。http 提供了 HTTP 客户端和服务器实现。
HTTP 客户端可用以发送请求到第三方 API 或者请求网页,以获取所需数据,类似于 curl 或者 wget 。
HTTP 服务器用以提供 HTTP 服务器来处理 HTTP 请求,此处我们使用了此功能:
func handlerFunc(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "<h1>Hello, 这里是 goblog</h1>")
}
func main() {
http.HandleFunc("/", handlerFunc)
http.ListenAndServe(":3000", nil)
}
http.ListenAndServe
http.ListenAndServe 用以监听本地 3000 端口以提供服务,标准的 HTTP 端口是 80 端口,如 baidu.com:80,另一个 Web 常用是 HTTPS 的 443 端口,如 baidu.com:443。当我们监听本地端口时,可使用 localhost 加上端口号来访问,如以下代码:
http.ListenAndServe(":3000", nil)
我们可以通过 localhost:3000/ 进行访问。
http.HandleFunc
http.HandleFunc 用以指定处理 HTTP 请求的函数,此函数允许我们只写一个 handler(在此例子中 handlerFunc,可任意命名),请求会通过参数传递进来,使用者只需与 http.Request 和 http.ResponseWriter 两个对象交互即可。
在:
fmt.Fprint(w, "<h1>Hello, 这里是 goblog</h1>")
中,我们利用 fmt.Fprint将<h1>Hello, 这里是 goblog子串写入 http.ResponseWriter,即可响应用户请求。
http.Request
http.Request 是用户的请求信息,一般用 r 作为简写。
一些常见的操作如:
- r.URL.Query() 获取用户参数
- 获取客户端信息 r.Header.Get("User-Agent")
二、Go标准库
什么是 Go 标准库?
-
Go 语言标准库是由 Go 官方团队维护,包含在 Go 语言安装包中的 Go 包。
-
对于 Go 程序员而言,标准库与语言本身同样重要,它好比一个百宝箱,能为各种常见的任务提供解决方案。
-
以下是 Go 标准库常见的包以及功能介绍:
| 标准库包名 | 功能简介 |
|---|---|
| bufio | 带缓冲的 I/O 操作 |
| bytes | 实现字节操作 |
| container | 封装堆、列表和环形列表等容器 |
| crypto | 加密算法 |
| database | 数据库驱动和接口 |
| debug | 各种调试文件格式访问及调试功能 |
| encoding | 常见算法如 JSON、XML、Base64 等 |
| flag | 命令行解析 |
| fmt | 格式化操作 |
| go | Go 语言的词法、语法树、类型等。可通过这个包进行代码信息提取和修改 |
| html | HTML 转义及模板系统 |
| image | 常见图形格式的访问及生成 |
| io | 实现 I/O 原始访问接口及访问封装 |
| math | 数学库 |
| net | 网络库,支持 Socket、HTTP、邮件、RPC、SMTP 等 |
| os | 操作系统平台不依赖平台操作封装 |
| path | 兼容各操作系统的路径操作实用函数 |
| plugin | Go 1.7 加入的插件系统。支持将代码编译为插件,按需加载 |
| reflect | 语言反射支持。可以动态获得代码中的类型信息,获取和修改变量的值 |
| regexp | 正则表达式封装 |
| runtime | 运行时接口 |
| sort | 排序接口 |
| strings | 字符串转换、解析及实用函数 |
| time | 时间接口 |
| text | 文本模板及 Token 词法器 |
如果你觉得我的文档能给你带来帮助,请不要吝啬你的赞哦~~