运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • Go

    • 前言

    • Go基础知识

    • Go基本语法

    • 实战项目:简单web服务

      • 最简单的HTTP服务
        • 1. 最简单的 HTTP 服务
      • 图书管理 API 服务
    • 基本数据类型

    • 内置运算符

    • 分支和循环

    • 函数 function

    • 结构体 struct

    • 方法 method

    • 实战项目:跟踪函数调用链

    • 接口 interface

    • 并发 concurrency

    • 指针

    • 实战项目:实现轻量级线程池

    • 实战项目:实现TCP服务器

    • go常用包

    • Gin框架

    • go随记

  • Python

  • Shell

  • Java

  • Vue

  • 前端

  • 编程浅尝
  • Go
  • 实战项目:简单web服务
lyndon
2022-06-07
目录

最简单的HTTP服务

# 实战项目:简单web服务

Go 官方用户 2021 调查报告 (opens new window),Go 应用最广泛的领域调查结果图,如下所示:

image-20220523000726020

Go 应用的前 4 个领域中,有两个都是 Web 服务相关的。一个是排在第一位的 API/RPC 服务,另一个是排在第四位的 Web 服务(返回 html 页面)。

# 1. 最简单的 HTTP 服务

Go“面向工程”特性,不仅体现在语言设计方面时刻考虑开发人员的体验,而且它还提供了完善的工具链和“自带电池”的标准库,这就使得 Go 程序大大减少了对外部第三方包的依赖。以开发 Web 服务为例,可以基于 Go 标准库提供的 net/http 包,轻松构建一个承载 Web 内容传输的 HTTP 服务。

最简单的 HTTP 服务:功能很简单,就是当收到一个 HTTP 请求后,给请求方返回包含“hello, world”数据的响应。

建立一个 simple-http-server 目录,并创建一个名为 simple-http-server 的 Go Module:

$mkdir simple-http-server
$cd simple-http-server
$go mod init simple-http-server
1
2
3

采用最简项目布局,在 simple-http-server 目录下创建一个 main.go 源文件:

  package main
 
  import "net/http"
  
  func main() {
      http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
          w.Write([]byte("hello, world"))
      })
      http.ListenAndServe(":8080", nil)
 }
1
2
3
4
5
6
7
8
9
10

只使用了 Go 标准库的 http 包。这段代码里,要注意两个重要的函数,一个是 ListenAndServe,另一个是 HandleFunc。

通过 http 包提供的 ListenAndServe 函数,建立起一个 HTTP 服务,这个服务监听本地的 8080 端口。客户端通过这个端口与服务建立连接,发送 HTTP 请求就可以得到相应的响应结果。

设置了一个处理函数,服务端处理客户端发送的请求。这个函数的函数原型是这样的:

func(w http.ResponseWriter, r *http.Request)
1

这个函数里有两个参数,w 和 r。第二个参数 r 代表来自客户端的 HTTP 请求,第一个参数 w 则是用来操作返回给客户端的应答的,基于 http 包实现的 HTTP 服务的处理函数都要符合这一原型。

所有来自客户端的请求,无论请求的 URI 路径(RequestURI)是什么,请求都会被设置的处理函数处理。通过 http.HandleFunc 设置这个处理函数时,传入的模式字符串为“/”。HTTP 服务器在收到请求后,会将请求中的 URI 路径与设置的模式字符串进行最长前缀匹配,并执行匹配到的模式字符串所对应的处理函数。在这个例子中,仅设置了“/”这一个模式字符串,并且所有请求的 URI 都能与之匹配,自然所有请求都会被我们设置的处理函数处理。

编译运行一下这个程序,直观感受一下 HTTP 服务处理请求的过程:

$cd simple-http-server
$go build
$./simple-http-server
1
2
3

接下来,用 curl 命令行工具模拟客户端,向上述服务建立连接并发送 http 请求:

$curl localhost:8080/
hello, world
1
2

curl 成功得到了 http 服务返回的“hello, world”响应数据。到此,HTTP 服务就构建成功了。

上次更新: 2022/06/12, 15:48:09
Go代码块与作用域
图书管理 API 服务

← Go代码块与作用域 图书管理 API 服务→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式