当前位置: 首页 > news >正文

go-zero学习笔记

内容不多,只有部分笔记,剩下的没有继续学下去,包括路由与处理器、日志中间件、请求上下文

文章目录

  • 1、go-zero核心库
    • 1.1 路由与处理器
    • 1.2 日志中间件
    • 1.3 请求上下文

1、go-zero核心库

1.1 路由与处理器

package main

import (
	"github.com/zeromicro/go-zero/rest"
	"net/http"
)

func main() {
	r := rest.MustNewServer(rest.RestConf{
		Port: 8080, // 设置监听端口
	})
	defer r.Stop()

	// 定义一个处理器
	r.AddRoute(rest.Route{
		Method:  http.MethodGet,
		Path:    "/hello",
		Handler: helloHandler,
	})

	r.Start()
}

// helloHandler 是处理 GET 请求的函数
func helloHandler(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Hello, Go-zero!"))
}

1.2 日志中间件

package main

import (
	"fmt"
	"github.com/zeromicro/go-zero/rest"
	"net/http"
)

func main() {
	fmt.Println("http://127.0.0.1:8081/hello")
	r := rest.MustNewServer(rest.RestConf{
		Port: 8081,
	})
	defer r.Stop()

	// 使用中间件来记录请求日志
	r.Use(logMiddleware)

	r.AddRoute(rest.Route{
		Method:  http.MethodGet,
		Path:    "/hello",
		Handler: helloHandler,
	})

	r.Start()
}

func logMiddleware(next http.HandlerFunc) http.HandlerFunc {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fmt.Printf("Received request: %s %s\n", r.Method, r.URL.Path)
		next.ServeHTTP(w, r)
	})
}



// helloHandler 处理 GET 请求
func helloHandler(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Hello, Go-zero!"))
}

1.3 请求上下文

package main

import (
	"fmt"
	"github.com/zeromicro/go-zero/rest"
	"net/http"
)

func main() {
	r := rest.MustNewServer(rest.RestConf{
		Port: 8080,
	})
	defer r.Stop()
	r.AddRoute(rest.Route{
		Method:  http.MethodGet,
		Path:    "/hello",
		Handler: helloHandler,
	})
	r.Start()
}

func helloHandler(w http.ResponseWriter, r *http.Request) {
	user := r.Context().Value("user")
	if user != nil {
		fmt.Fprintf(w, "Hello, %s!", user)
	} else {
		fmt.Fprintf(w, "Hello, %s!", r.FormValue("name"))
	}

}

API模式生成器、RPC(远程过程调用)、服务治理、持久化层(数据层)、配置与日志、定时任务、监控与报警、微服务架构支持

http://www.dtcms.com/a/85312.html

相关文章:

  • 第39章:CSI插件开发与定制化存储需求
  • Django框架视图与路由(一)
  • 我的Go学习路线概览
  • 关于 URH(Universal Radio Hacker) 的详细介绍、安装指南、配置方法及使用说明
  • Java 的 AutoCloseable 接口
  • 警翼(Pe)执法记录仪格式化后的恢复方法
  • 分类预测 | Matlab实现BO-GRU-Attention贝叶斯优化门控循环单元融合注意力机制多特征分类预测
  • 【系统稳定性】1.13 解析gcore
  • 京东一面:MySQL 主备延迟有哪些坑?主备切换策略
  • 【AI模型】深度解析:DeepSeek的联网搜索的实现原理与认知误区
  • 运功学-【机械臂】
  • 1.设备电气设计、装配的注意事项
  • C语言入门教程100讲(19)do-while 循环
  • 动态规划完全背包系列一>完全平方数
  • android......
  • Python学习笔记(4)
  • MySQL 锁机制详解
  • Scikit-learn模型构建全流程解析:从数据预处理到超参数调优
  • WebLogic中间件漏洞攻略
  • 六十天前端强化训练之第二十八天之Composition 函数完全指南
  • 串口通信与Modbus通信的区别和联系
  • 2025高频面试算法总结篇【链表堆栈队列】
  • priority_queue的模拟实现
  • 如何使用logminer
  • 剑指小米特斯拉:秦L EV上市11.98万起
  • BP神经网络+NSGAII算法(保真)
  • 【F#入门】第四讲 函数,管道与组合
  • dnf命令详解
  • hackmyvm-lookup
  • Linux中查找标准库函数的定义