Потратив минуту на чтение остальной части кода, эти блоки по всему коду . В этих случаях, однако, являются недолговечными переменными, которые объявлены, и это метод для отбрасывания их после того, как они больше не нужны. Два наиболее вероятных сценария состоят в том, что для регистратора могут быть какие-то сценарии или что это просто особый стиль, выбранный разработчиком. На самом деле, оба, скорее всего, верны.
Это немного странный стиль для Go, но он эффективен при явном сообщении сборщику мусора, а также разработчику, что они вышли за рамки. Тем не менее, компилятор Go и GC достаточно продвинуты на момент написания, чтобы знать, когда их можно в любом случае отбросить, поэтому для самой программы мало пользы, кроме устранения загромождения пространства имен текущей области.
Я нахожусь вСоглашение с @Schwern, тем не менее, добавляет ясности и дает те же результаты, что и рефакторирует их в свои собственные функции. Если кто-то тратит время на то, чтобы явно объявить блоки области видимости, то почему бы не использовать это время, чтобы вместо этого заставить его функционировать?
Блок связанного кода:
var svc scepserver.Service // scep service
{
svcOptions := []scepserver.ServiceOption{
scepserver.ChallengePassword(*flChallengePassword),
scepserver.WithCSRVerifier(csrVerifier),
scepserver.CAKeyPassword([]byte(*flCAPass)),
scepserver.ClientValidity(clientValidity),
scepserver.AllowRenewal(allowRenewal),
scepserver.WithLogger(logger),
}
svc, err = scepserver.NewService(depot, svcOptions...)
if err != nil {
lginfo.Log("err", err)
os.Exit(1)
}
svc = scepserver.NewLoggingService(log.With(lginfo, "component", "scep_service"), svc)
}
var h http.Handler // http handler
{
e := scepserver.MakeServerEndpoints(svc)
e.GetEndpoint = scepserver.EndpointLoggingMiddleware(lginfo)(e.GetEndpoint)
e.PostEndpoint = scepserver.EndpointLoggingMiddleware(lginfo)(e.PostEndpoint)
h = scepserver.MakeHTTPHandler(e, svc, log.With(lginfo, "component", "http"))
}