PHP转GO,全是干货。GoLang基础知识(一)

246 阅读3分钟

一、引入包、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格式化操作
goGo 语言的词法、语法树、类型等。可通过这个包进行代码信息提取和修改
htmlHTML 转义及模板系统
image常见图形格式的访问及生成
io实现 I/O 原始访问接口及访问封装
math数学库
net网络库,支持 Socket、HTTP、邮件、RPC、SMTP 等
os操作系统平台不依赖平台操作封装
path兼容各操作系统的路径操作实用函数
pluginGo 1.7 加入的插件系统。支持将代码编译为插件,按需加载
reflect语言反射支持。可以动态获得代码中的类型信息,获取和修改变量的值
regexp正则表达式封装
runtime运行时接口
sort排序接口
strings字符串转换、解析及实用函数
time时间接口
text文本模板及 Token 词法器

如果你觉得我的文档能给你带来帮助,请不要吝啬你的赞哦~~