Значение в контексте не может быть передано в другой пакет? - PullRequest
0 голосов
/ 16 октября 2018

Сегодня я пытаюсь программировать с контекстом, код которого выглядит следующим образом:

package main

func main(){
  ctx := context.Background()
  ctx = context.WithValue(ctx,"appid","test111")
  b.dosomething()
}


package b

func dosomething(ctx context.Context){
    fmt.Println(ctx.Value("appid").(string))
} 

Затем моя программа потерпела крах. Я думаю, это связано с тем, что эти ctx находятся в другом пакете

1 Ответ

0 голосов
/ 16 октября 2018

Я предлагаю вам использовать контекст только при жизни одной задачи и передавать тот же контекст через функции.Также вы должны понимать, где использовать контекст, а где просто передавать аргументы в функции.

Другим предложением является использование пользовательских типов для установки и получения значений из контекста.

В соответствии со всем вышеизложенным ваша программа должна выглядеть следующим образом:

package main

import (
    "context"
    "fmt"
)

type KeyMsg string

func main() {
    ctx := context.WithValue(context.Background(), KeyMsg("msg"), "hello")
    DoSomething(ctx)
}

// DoSomething accepts context value, retrieves message by KeyMsg and prints it.
func DoSomething(ctx context.Context) {
    msg, ok := ctx.Value(KeyMsg("msg")).(string)
    if !ok {
        return
    }

    fmt.Println("got msg:", msg)
}

Вы можетепереместите функцию DoSomething в другой пакет и просто назовите ее как имя_пакета. DoSomething ничего не изменит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...