Go语言从入门到精通 -【web项目实战篇】- 搭建Web服务器

本节核心内容

  • 介绍使用net/http包创建HTTP服务
  • 介绍使用net/http包建立Web服务器
  • 介绍Gin框架

本小节视频教程和代码:百度网盘;密码6ejd

可先下载视频和源码到本地,边看视频边结合源码理解后续内容,边学边练。

想查看Gin源码的朋友可自行查看Gin框架官方地址

搭建一个简单的Web服务器

Go语言标准库 - net/http

这里给大家提供一个学习Go语言的一个很好的起点,Go语言官方文档,今天我们学习的Go Web服务器的搭建就需要用到Go语言官方提供的标准库 net/http,通过http包提供了HTTP客户端和服务端的实现。同时使用这个包能很简单地对web的路由,静态文件,模版,cookie等数据进行设置和操作。如果对http概念不是太清楚的朋友可以自行google。我们先来看一个原生的net/http请求的例子:

创建HTTP服务

package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	//生成client 参数为默认
	client := &http.Client{}

	//生成要访问的url
	url := "http://www.baidu.com"
	//提交请求
	reqest, err := http.NewRequest("GET", url, nil)

	if err != nil {
		panic(err)
	}
	//处理返回结果
	response, _ := client.Do(reqest)

	//将结果定位到标准输出 也可以直接打印出来 或者定位到其他地方进行相应的处理
	stdout := os.Stdout
	_, err = io.Copy(stdout, response.Body)

	//返回的状态码
	status := response.StatusCode
	fmt.Println(status)
}


上面代码实现了一个简单的页面请求,我们可以用这种方式去请求一些网址,已获得响应,从而对响应数据进行处理,但这种方式很少见,我们先了解即可,下面我们看一下怎样用http包建立一个web服务器。

http包建立Web服务器

package main
import (
    "fmt"
    "net/http"
    "strings"
    "log"
)
func sayhelloName(w http.ResponseWriter, r *http.Request) {
    r.ParseForm() //解析参数,默认是不会解析的
    fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息
    fmt.Println("path", r.URL.Path)
    fmt.Println("scheme", r.URL.Scheme)
    fmt.Println(r.Form["url_long"])
    for k, v := range r.Form {
        fmt.Println("key:", k)
        fmt.Println("val:", strings.Join(v, ""))
    }
    fmt.Fprintf(w, "Hello Wrold!") //这个写入到w的是输出到客户端的
}
func main() {
    http.HandleFunc("/", sayhelloName) //设置访问的路由
    err := http.ListenAndServe("127.0.0.1:9090", nil) //设置要监听的Ip和端口
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

页面输出:

Hello Wrold!

运行结果:

map[]
path /
scheme 
[]
map[]
path /favicon.ico
scheme 
[]

可以看到在没有传参时,控制台打印的数据都为空,接下来演示一下传入参数后的结果:

添加参数:

localhost:9090/?url_long=111&url_long=222

运行结果:

map[url_long:[111 222]]
path /
scheme 
[111 222]
key: url_long
val: 111222
map[]
path /favicon.ico
scheme 
[]

我们看到了上面的代码,要编写一个Web服务器是不是很简单,只要调用http包的两个函数就可以了。
我们看到Go通过简单的几行代码就已经运行起来一个Web服务了,而且这个Web服务内部有支持高并发的特性。我们现在知道了原来创建一个http服务,大致只需要经历两个过程

  • 注册路由

提供url模式和handler函数的映射,并实例化一个server对象,并开启对客户端的监听。

http.HandleFunc("/", sayhelloName)
  • 设定要监听的IP和端口。
http.ListenAndServe("127.0.0.1:9090", nil)

是不是很简单?赶紧自己动手试试吧。

Gin框架

在学习了前面的内容,我们来了解一个框架Gin,Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本。具有快速灵活,容错方便等特点。该官网的说法是它具有更好的性能,有多好呢?据说是速度提升了40倍,所以这也是我们今后开发中主要使用的一个框架。

代码示例:

package main

import (
	"fmt"
	"net/http"
	"github.com/gin-gonic/gin"
)

func Login(c *gin.Context)  {
	fmt.Fprintf(c.Writer,"Welcome index!")
}

func main() {
	router := gin.Default()
	router.GET("/",Login)

	router.GET("/user/:name", func(c *gin.Context) {
		name := c.Param("name")
		c.String(http.StatusOK, "Hello %s", name)
	})

	router.GET("/user/:name/*action", func(c *gin.Context) {
		name := c.Param("name")
		action := c.Param("action")
		message := name + " is " + action
		c.String(http.StatusOK, message)
	})

	router.POST("/your/:name/*action", func(c *gin.Context) {
		name := c.Param("name")
		action := c.Param("action")
		message := name + " is " + action
		c.String(http.StatusOK, message)
	})

	router.Run(":8080")
}

页面返回结果:

Welcome index!

请求参数:

http://localhost:8080/user/name:jeck/18

页面返回结果:

name:jeck is /18

使用Get请求Post路径:

http://localhost:8080/your/name:Lucy/21

image

小结

本小节主要给大家演示了分别基于Http的请求,和基于Http包以及Gin框架的web服务,其中首推Gin框架,因为它有着更高的效率

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

回首笑人间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值