首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go中变量init

Go中变量init
EN

Stack Overflow用户
提问于 2017-07-04 06:51:35
回答 2查看 206关注 0票数 2

我看到下面的代码(我把它简化了一点)。

代码语言:javascript
复制
func getEndpoints(db *sqlx.DB) s.Endpoints {
    var endpoints s.Endpoints
    {
        repository := acl.NewRepository(db)
        service := stat.NewService(repository)
        endpoints = s.Endpoints{
            GetEndpoint: s.MakeEndpoint(service),
        }
    }

    return endpoints 
}

如果我正确理解这段代码,var endpoints s.Endpoints{...}中的代码将逐行执行,endpoints = s.Endpoints ...一行初始化上面声明的var endpoints变量。

我认为这样重写是正确的(如果我错了,请纠正我):

代码语言:javascript
复制
func getEndpoints(db *sqlx.DB) s.Endpoints {

    repository := acl.NewRepository(db)
    service := stat.NewService(repository)
    endpoints := s.Endpoints{
        GetEndpoint: s.MakeEndpoint(service),
    }

    return endpoints 
}

有人能解释一下为什么初始化写在var endpoints s.Endpoints{...}里面吗?有什么办法这样做吗?我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-04 06:55:40

添加一个新的块将创建一个新的变量范围,并且在该块中声明的变量将不可在该块之外使用:

代码语言:javascript
复制
var endpoints s.Endpoints
{
    repository := acl.NewRepository(db)
    service := stat.NewService(repository)
    endpoints = s.Endpoints{
        GetEndpoint: s.MakeEndpoint(service),
    }
}

// service and repository  variables are not defined here!

在您特定的简化示例中,这没有什么意义,但是如果您有具有相同变量的其他块,则更有意义。例如:

代码语言:javascript
复制
var endpoints s.Endpoints
{
    repository := acl.NewRepository(db)
    service := stat.NewService(repository)
    endpoints = s.Endpoints{
        GetEndpoint: s.MakeEndpoint(service),
    }
}

 // Get another repository
{
    repository := otherRepo.NewRepository(db)
    repository.DoSomething()
}

有些人认为这是“良好的卫生”。就我个人而言,我认为这不值得降低可读性。

票数 2
EN

Stack Overflow用户

发布于 2017-07-04 06:55:07

它们是等价物。

{...}块与var关键字的变量声明无关。只是碰巧是一个接一个地写的。

{...}是一个简单的区块,没有别的。var声明不需要该块,即使有一个块,它也与变量声明无关。您可以在任何地方插入一个语句块。

当使用显式块(当没有必要的块时)时,很少会使用分组语句,并控制在其中声明的变量和其他标识符的作用域,因为变量的作用域结束于最内部的包含块(规范:声明和范围)的末尾。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44898833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档