MST

星途 面试题库

面试题:Go Context传递数据争议下的代码实践

假设你正在开发一个微服务,其中有多个函数调用,需要在这些函数间通过Context传递一些用户认证相关的数据。但由于Context传递数据存在争议,现要求你设计一个方案,既能满足数据传递需求,又能尽量避免争议产生的负面影响。请用代码示例展示你的方案,并解释其原理。
10.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

方案设计及原理

可以通过自定义结构体来封装用户认证相关数据,并在函数调用链中显式传递该结构体,这样既能避免使用 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 结构体来封装用户认证数据,在 Function1Function2Function3 函数之间显式传递这个结构体。main 函数初始化认证数据并调用 Function1,后续函数通过参数获取认证数据,从而实现数据在函数间的传递。