在 golang 中,你可以使用函数回调来组织代码,它允许你传递一个函数作为参数,并在需要时执行它。这可以简化代码,提高可读性,避免回调魔术。具体步骤如下:定义一个函数类型来表示回调。将函数回调传递给其他函数作为参数。使用回调来处理 http 请求,根据传入的请求路径触发不同的回调。
如何在 Go 中组织函数回调代码
Golang 中的函数回调允许你传递一个函数作为参数,然后在适当的时候执行它。这可以简化代码组织,并避免回调魔术,从而提高代码可读性。
定义回调函数
立即学习“go语言免费学习笔记(深入)”;
首先,定义一个函数类型来表示回调:
type Callback func(message string)
此函数类型接受一个字符串作为参数,并可以执行任何操作。
传递回调
然后,可以将函数回调传递给其他函数作为参数:
func SendMessage(callback Callback) {
// 发送消息...
callback("消息已发送")
}
SendMessage 函数接受一个 Callback 作为参数,并在消息发送完毕后调用该回调。
实战案例
以下是一个实战案例,演示如何在 Golang 中使用回调处理 HTTP 请求:
package main
import (
"log"
"net/http"
)
// 定义一个回调类型来处理响应
type ResponseCallback func(w http.ResponseWriter, r *http.Request)
// 定义一个处理函数,它接收回调作为参数
func HandleRequest(callback ResponseCallback) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
log.Printf("收到请求:%s", r.URL.Path)
callback(w, r)
}
}
func main() {
// 创建两个回调
handler1 := func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("回调 1 已触发"))
}
handler2 := func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("回调 2 已触发"))
}
// 将回调传递给 HandleRequest 函数
http.HandleFunc("/endpoint1", HandleRequest(handler1))
http.HandleFunc("/endpoint2", HandleRequest(handler2))
log.Fatal(http.ListenAndServe(":8080", nil))
}
此代码定义了两个回调函数(handler1 和 handler2),然后使用 HandleRequest 函数将它们传递给 http.HandleFunc。这允许根据传入的请求路径触发不同的回调。