从0开始Go语言,用Golang搭建网站
实践是最好的学习方式零基础通过开发Web服务学习Go语言
本问适合有一定编程基础,但是没有Go语言基础的同学。
也就是俗称的“骗你”学Go语言系列。
这是一个适合阅读的系列,我希望您能够在车上、厕所、餐厅都阅读它,涉及代码的部分也是精简而实用的。
学习需要动机
Go语言能干什么?为什么要学习Go语言?
本系列文章,将会以编程开发中需求最大、应用最广的Web开发为例,一步一步的学习Go语言。当看完本系列,您能够清晰的了解Go语言Web开发的基本原理,您会惊叹于Go语言的简洁、高效和新鲜。
结果反馈才能让你记住
《刻意练习》一书中说,学习需要及时反馈结果,才能提高学习体验。
本系列文章的每一节,都会包含一段可运行的有效代码,跟着内容一步一步操作,你可以在你自己的计算机上体验每一句代码的作用。
不要学习不需要的东西
文章围绕范例为核心,介绍知识点。文中不罗列语法和关键字,当您还不知道它们用来干什么时,反而会干扰您的注意力。
希望您在阅读本系列文章后,对Go语言产生更多的学习欲望,成为一名合格的Gopher
Gopher:原译是囊地鼠,也就是Go语言Logo的那个小可爱;这里特指Go程序员给自己的昵称。如何10分钟搭建Go开发环境
1.下载Go语言安装文件
访问Go语言官方网站下载页面:
https://golang.org/dl
可以看到官网提供了Microsoft Windows、Apple MacOS、Linux和Source下载。
直接下载对应操作系统的安装包。
[图片上传失败...(image-591890-1557632893071)]
2.和其他软件一样,根据提示安装
3.配置环境变量
在正式使用Go编写代码之前,还有一个重要的“环境变量”需要配置:“$GOPATH”
GOPATH环境变量指定工作区的位置。如果没有设置GOPATH,则假定在Unix系统上为$HOME/go,在Windows上为 %USERPROFILE%go。如果要将自定义位置用作工作空间,可以设置GOPATH环境变量。
GOPATH环境变量是用于设置Go编译可以执行文件、包源码以及依赖包所必要的工作目录路径,Go1.11后,新的木块管理虽然可以不再依赖 $GOPATH/src,但是依然需要使用 $GOPATH/pkg 路径来保存依赖包。
首先,创建好一个目录用作GOPATH目录
然后设置环境变量 GOPATH:
Linux & MacOS:
导入环境变量
$ export GOPATH=$YOUR_PATH/go
保存环境变量
$ source ~/.bash_profile
Windows:
控制面板->系统->高级系统设置->高级->环境变量设置
GOPATH所指定的目录会生成3个子目录:
- bin:存放 go install 编译的可执行二进制文件
- pkg:存放 go install 编译后的包文件,就会存放在这里
- src:存放 go get 命令下载的源码包文件
4.检查环境
打开命令行工具,运行
$ go env
如果你看到类似这样的结果,说明Go语言环境安装完成.
GOARCH="amd64" GOBIN="" GOCACHE="/Users/zeta/Library/Caches/go-build" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="/Users/zeta/workspace/go" GOPROXY="https://goproxy.io" GORACE="" GOROOT="/usr/local/go" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" GCCGO="gccgo" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/7v/omg2000000000000019/T/go-build760324613=/tmp/go-build -gno-record-gcc-switches -fno-common"
5.选择一款趁手的编辑器或IDE
现在很多通用的编辑器或IDE都支持Go语言比如
- Atom
- Visual Studio Code
- Sublime Text2
- ItelliJ Idea
Go语言专用的IDE有
- LiteIDE
- Goland
专用的IDE无论是配置和使用都比通用编辑器/IDE的简单许多,但是我还是推荐大家使用通用编辑器/IDE,因为在开发过程中肯定会需要编写一些其他语言的程序或脚本,专用IDE在其他语言编写方面较弱,来回切换不同的编辑器/IDE窗口会很低效。
另外,专用IDE提供很多高效的工具,在编译、调试方面都很方便,但是学习阶段,建议大家手动执行命令编译、调试,有利于掌握Go语言。
四行代码的Hello World!所能表达出来的核心命令行代码仅适用于Linux和MacOS系统,Windows根据说明在视窗下操作即可。
1.创建项目
创建一个文件夹,进入该文件夹
$ mkdir gowebserver && cd gowebserver
新建一个文件 main.go
$ touch main.go
2. 用编辑器打开文件,并输入以下代码:
package main import "fmt" func main() { fmt.Println("Hello, 世界") }
3.打开命令行终端,输入以下命令
$ go run main.go
看到终端会输出:
Hello, 世界
第一个Go代码就完成了
这是一个很简单的Hello World,但是包含了Go语言编程的许多核心元素,接下来就详细讲解。
解读知识点: 包 与 函数
package申明包 & import导入包
Go程序是由包构成的。
代码的第一行, 申明程序自己的包,用 package关键字。package关键字必须是第一行出现的代码。
范例代码中,申明的本包名 main
在代码中第二行, 导入“fmt”包, 使用 import 关键字。默认情况下,导入包的包名与导入路径的最后一个元素一致,例如 import "math/rand",在代码中使用这个包时,直接使用rand,例如 rand.New()
导入包的写法可以多行,也可以“分组”, 例如:
import "fmt" import "math/rand"
或者 分组
import ( "fmt" "math/rand" )
fmt包是Go语言内建的包,作用是输出打印。
func关键字:定义函数
func是function的缩写, 在Go语言中是定义函数的关键字。
func定义函数的格式为:
func 函数名(参数1 类型,参数2 类型){ 函数体 }
本例中定义了一个main函数。main函数没有参数。 然后在main函数体里调用fmt包的Println函数,在控制台输出字符串 “Hello, 世界”
所有Go语言的程序的入口都是main包下的main函数 main.main(),所以每一个可执行的Go程序都应该有一个main包和一个main函数。
我们已经介绍了九牛一毛中的一毛,接下来正式通过搭建一个简单的Web服务学习Go语言
0依赖,创建一个Web服务先从代码开始
打开之前创建好的main.go文件,修改代码如下:
package main import ( "fmt" "net/http" ) func myWeb(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "这是一个开始") } func main() { http.HandleFunc("/