跟着金毛从零开发Go Web —— (1)使用http库启动http server叭!
前言:
《Golang学习日记》系列实在是不好写,555,而且市面上已经有了很多优秀的go教程了,再就是我要是边学go还边写个笔记要浪费很多时间,所以《Golang学习日记》很遗憾地被我在这宣布停更了(也许有一天心血来潮会复活?)。Go系列取而代之的是我会在边学着做项目的时候,一边记录学习的过程,我认为记录下做一个项目时的关键点会很有价值。所以,从今天开始金毛站长开始了学习Go web的项目开发,项目会用到go的web框架——gin,以及ORM框架——gorm。我会边学边做记录,尽量让大家能通过看我的笔记就能复刻和学会一模一样的项目。
启动http server:
本篇很简单,只讲go怎么启动http server并且怎么显示一个网页,也就是本篇我们一起web开发入个门。用到的是http库,不需要任何框架。
1. 引入http库
首先我们引入http库,在go文件中输入以下代码:
import "net/http"
2. Go写一个html网页
接下来该用Go写一个html网页了!新建一个函数用来专门写我们的网页,就叫它Welcome吧!那么我们需要什么参数呢?写http我们一般需要的是两个:请求(Request)和响应(Response)。这里我们是要写网页的,所以我们需要往http里写入东西,所以对于响应来说我们需要的是一个ResponseWriter,它们都在http库中写好了,我们直接拿来用就好了。示例如下:
func Welcome(w http.ResponseWriter, r *http.Request) {
/* 使用Fprintfln是往文件里写东西,这里是往我们的ResponseWriter写的意思
* 第二个参数是我们要写的内容,
* Fprintln会返回一个int(写入字节数)和一个err(错误信息)
* 这里我们用空白标识符对两个返回值进行接收*/
_, _ = fmt.Fprintln(w, "hello,this is Eriri!")
}
3. http.HandleFunc处理网页
写完了我们的网页之后,该完成我们的main函数了,想让我们http服务器能够调用刚写完的Welcome,这时候就需要http.HandleFunc这个方法:
func HandleFunc(pattern string, handler func(ResponseWriter, *Request))
HandleFunc这个方法有两个参数,第一个参数pattern是个相对URL地址,第二个参数即要调用的方法。示例如下:
http.HandleFunc("/welcome", Welcome)
4. 启动http server
最后是启动我们的http server,使用http.ListenAndServe方法就可以启动我们的http server啦。该方法需要两个参数,一个是addr即地址,另一个handler是处理程序,通常情况下我们都是让它为nil,此时会使用默认的http请求多路复用器DefaultServeMux。它还有一个返回值error,返回值为错误信息。
func ListenAndServe(addr string, handler Handler) error
以下是完整代码示例:
package main
import (
"fmt"
"net/http"
)
func Welcome(w http.ResponseWriter, r *http.Request) {
/* 使用Fprintfln是往文件里写东西,这里是往我们的ResponseWriter写的意思
* 第二个参数是我们要写的内容,
* Fprintln会返回一个int(写入字节数)和一个err(错误信息)
* 这里我们用空白标识符对两个返回值进行接收*/
_, _ = fmt.Fprintln(w, "hello,this is Eriri!")
}
func main() {
http.HandleFunc("/welcome", Welcome)
//:520意思为使用520端口
err := http.ListenAndServe(":520", nil)
//对错误信息的处理
if err != nil {
fmt.Printf("http server startup failed,error:%v\n", err)
return
}
}
运行go程序我们的http server就启动啦!此时在浏览器中输入URL:http://localhost:520/welcome 或者 http://127.0.0.1:520/welcome ,即可显示我们的Welcome网页!
我们可以改进一下Welcome函数,引入ioutil包使用ReadFile方法对本地文件进行读取之后,再用本地文件的内容来写到http中,这样可以让我们更方便地编辑html内容。
func Welcome(w http.ResponseWriter, r *http.Request) {
i, _ := ioutil.ReadFile("hello.txt")
//i是[]byte类型,强制转换为string
_, _ = fmt.Fprintln(w, string(i))
}
杂谈:
本篇的内容到此结束,很短很简单,大家应该很快就用go启动起来一个http server了吧?🍭🍭我们下期再见!