首页
学习
活动
专区
圈层
工具
发布
16 篇文章
1
Go 语言 Web 编程系列(一)—— 快速入门:创建第一个 Web 应用
2
Go 语言 Web 编程系列(二)—— HTTP 请求处理的底层运行机制
3
Go 语言 Web 编程系列(三)—— 基于官方标准库自定义路由处理器
4
Go 语言 Web 编程系列(四)—— 基于 gorilla/mux 包实现路由定义:基本使用篇
5
Go 语言 Web 编程系列(五)—— 基于 gorilla/mux 包实现路由匹配:进阶使用篇
6
Go 语言 Web 编程系列(六)—— 基于 gorilla/mux 包实现路由匹配:路由中间件
7
Go 语言 Web 编程系列(七)—— 基于 gorilla/mux 包实现路由匹配:处理静态资源响应
8
Go 语言 Web 编程系列(八)—— 基于 gorilla/mux 包实现路由匹配:服务 SPA 应用
9
Go 语言 Web 编程系列(九)—— 基于 gorilla/mux 包实现路由匹配:通过 CORS 处理跨域请求
10
Go 语言 Web 编程系列(十)—— 基于 gorilla/mux 包实现路由匹配:健康检查与接口测试
11
Go 语言 Web 编程系列(十一)—— 仿照 Laravel 框架对 Go 路由代码进行拆分
12
Go 语言 Web 编程系列(十二)—— 通过 Request 读取 HTTP 请求报文
13
Go 语言 Web 编程系列(十三)—— 获取用户请求数据(上)
14
Go 语言 Web 编程系列(十四)—— 获取用户请求数据(下)
15
Go 语言 Web 编程系列(十五)—— 通过 ResponseWriter 接口创建 HTTP 响应
16
Go 语言 Web 编程系列(十六)—— 设置、读取和删除 Cookie

Go 语言 Web 编程系列(一)—— 快速入门:创建第一个 Web 应用

学习完 Go 语言的基础知识,接下来,我们来学习 Go Web 编程。

遵循程序员的传统,我们从 Web 应用版"Hello World"式服务开始。

1、HTTP 服务器实现

首先,我们基于 HTTP 编程中介绍的 net/http 包来实现一个简单的 HTTP 服务器作为 Web 服务器:

代码语言:javascript
复制
package main

import (
    "fmt"
    "log"
    "net/http"
    "strings"
)

func sayHelloWorld(w http.ResponseWriter, r *http.Request)  {
    r.ParseForm() // 解析参数
    fmt.Println(r.Form) // 在服务端打印请求参数
    fmt.Println("URL:", r.URL.Path)  // 请求 URL
    fmt.Println("Scheme:", r.URL.Scheme)
    for k, v := range r.Form {
        fmt.Println(k, ":", strings.Join(v, ""))
    }
    fmt.Fprintf(w, "你好,学院君!")  // 发送响应到客户端
}

func main()  {
    http.HandleFunc("/", sayHelloWorld)
    err := http.ListenAndServe(":9091", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}
代码语言:javascript
复制

在这段代码中,我们在入口函数中通过 http.HandleFunc() 方法定义了一个路由 / 和对应的路由处理函数 sayHelloWorld(在该函数中,r 代表请求对象,w 代表响应对象),然后通过 http.ListenAndServe 启动这个 HTTP 服务器,并设置监听端口为 9091

Laravel 中的对比实现

如果与 PHP 应用类比的话,以 Laravel 框架为例,上述路由定义操作类似我们在 routes/web.php 定义一个这样一个首页路由:

代码语言:javascript
复制
Route::get('/', function(Request $request) {
    dump($request->all());  // 打印请求数据
    dump("URL:" .  $request->path());  // 请求路径
    dump("Scheme:", $request->getScheme()); // 获取 Scheme
    foreach ($request->all() as $key => $value) {
        dump($key . ":" . $value);
    }
    return "你好,学院君!";  // 发送响应到客户端
});
代码语言:javascript
复制

然后启动 PHP 内置 Web 服务器监听客户端请求,默认监听的是 8000 端口(PHP 中这块逻辑底层帮我们封装好了,开发者只需要关心上层业务逻辑代码即可):

2、客户端请求测试

接下来,我们对 Go 语言实现的简易 Web 应用进行测试,要启动 Golang 的 HTTP 服务器,需要在对应代码所在目录运行如下代码(假设服务端代码存放在 server.go 中):

代码语言:javascript
复制
go run server.go

然后在浏览器中请求 http://localhost:9091,页面显示如下:

服务端也会输出对应的请求日志:

然后我们在客户端请求中带上参数信息:

此时,服务端就会打印对应的参数字段值出来:

Laravel 中的对比测试

如果要在基于 PHP Laravel 框架编写的测试应用中体验类似输出,需要先安装如下扩展包使得 dump 函数打印信息出现在服务端日志而不是渲染到客户端浏览器:

代码语言:javascript
复制
composer require --dev beyondcode/laravel-dump-server

然后再另外打开一个窗口执行如下命令用于打印服务端 dump 函数输出:

然后我们在浏览器访问 http://localhost:8000,同样显示欢迎信息如下:

此时没有带任何参数,Dump Server 打印日志如下:

如果带上参数,比如 http://localhost:8000?username=学院君&tutorial=Laravel从入门到精通教程&topic=Web编程,则 Dump Server 也会打印出详细的请求数据:

下一篇
举报
领券