2.1.创建项目目录
一般我们会把项目放置于 $GOPATH/src
目录下。推荐的做法是将 GitHub 用户名作为命名空间
$ cd $GOPATH/src
$ mkdir -p github.com/junetalk/goblog
$ cd github.com/junetalk/goblog
2.2.创建 main.go 文件
命令行 VSCode 编辑器:
$ code .
右键新建文件:main.go
package main
import (
"fmt"
"net/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)
}
VSCode 的内置终端默认打开的就是项目所在目录,我们可以使用以下命令打印当前目录进行确认:
$ pwd
接下来在内置终端里运行我们 go 程序:
$ go run main.go
运行成功后,此时浏览器打开 localhost:3000/ 即可看到:
Hello, 这里是 goblog
在 VSCode 的内置终端内,使用快捷键 Ctrl+C
可关闭以上 go 程序的运行。
2.3.代码版本
日常编程中,所有代码都应该使用 Git 版本控制器来管理。接下来一起为项目代码新增版本控制:
$ git init .
$ git add .
$ git commit -m "初始化"
2.4.代码说明
main.go
package main
import (
"fmt"
"net/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)
}
1、包名
每一段 Go 程序都 必须 属于一个包。而 main 包在 Go 程序中有特殊的位置。
- 如果一段程序是属于 main 包的,那么当执行
go install
或者go run
时就会将其生成二进制文件,当执行这个文件时,就会调用main
函数。 - main 包里的
main
函数相当于应用程序的入口。要想生成可执行的二进制文件,必须把代码写在main
包里,而且其中必须包含一个main
函数。 - 存放
main
函数的文件名称不一定是 main.go,也可以是任何其他合规的 go 文件名称,例如 app.go、index.go。一般推荐使用 main.go,因为直观。
2、import
我们使用 import
关键词用以引入程序所需的 Go 包。在 goblog 中,我们引入了两个 Go 标准库的包。
3、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 词法器 |