面试题答案
一键面试方案设计及原理
可以通过自定义结构体来封装用户认证相关数据,并在函数调用链中显式传递该结构体,这样既能避免使用 Context
传递数据带来的争议,又能满足数据传递需求。其原理是将需要传递的数据聚合在一个结构体中,使得数据的传递更加清晰直观,调用方明确知道哪些数据会被传递和使用。
代码示例(以Go语言为例)
package main
import (
"fmt"
)
// AuthData 封装用户认证相关数据
type AuthData struct {
UserID string
Token string
}
// Function1 模拟第一个函数
func Function1(auth AuthData) {
fmt.Printf("Function1 received userID: %s, token: %s\n", auth.UserID, auth.Token)
Function2(auth)
}
// Function2 模拟第二个函数
func Function2(auth AuthData) {
fmt.Printf("Function2 received userID: %s, token: %s\n", auth.UserID, auth.Token)
Function3(auth)
}
// Function3 模拟第三个函数
func Function3(auth AuthData) {
fmt.Printf("Function3 received userID: %s, token: %s\n", auth.UserID, auth.Token)
}
func main() {
auth := AuthData{
UserID: "12345",
Token: "abcdef",
}
Function1(auth)
}
在上述代码中,定义了 AuthData
结构体来封装用户认证数据,在 Function1
、Function2
和 Function3
函数之间显式传递这个结构体。main
函数初始化认证数据并调用 Function1
,后续函数通过参数获取认证数据,从而实现数据在函数间的传递。