On Oct 10, 2012 1:42 PM, "平民四月份" <lew...@gmail.com> wrote:
>
> 刚才在群里讨论,全局变量的初始化顺序是确定的,而当引入了init过后,这个问题就有点细致了,假设有一个包叫example,它包含三个文件: a.go, b.go, c.go.
>
> //a.go
> var g_Int int
> ...
>
>
> // b.go
> func init() {
>
> g_Int++
> println(g_Int)
> }
> ...
>
>
> // c.go
> func init() {
>
> g_Int++
> println(g_Int)
> }
>
> 按照spec的说法,在同一个包内的多个init的调用顺序是不确定的,那么在b.go中打印出的值可能为1也可能为2,同理c.go中的init,耍如果一个包中只允许一个init存在,则不会出现这种中途不一致的情况,请问允许多个init的设计决定是什么?
因为包可以包含多个文件,如果不允许多个init()那么每个文件
就不再那么独立了(无法在声明全局变量的附近初始化变量)
On Oct 10, 2012 1:56 PM, "Oling Cat" <olin...@gmail.com> wrote:
> 但这样不也引入了一点不确定性么?
如果需要相互依赖的初始化,不要用init().
// fileA.go
var globalA = makeA()
// fileB.go
var globalB = makeBFromA(globalA)
init()不应该像lz那样用。
规定init()的调用顺序意义不大,而且多个文件里的人init()
的顺序是不好定义的(试试写一个就知道了),引入这么多复
杂性意义不大。
同一个pkg允许多个init函数并存,本身就是不靠谱的设计,完全是没有必要的,也与golang一贯的设计准则不符。不知道是哪个家伙一拍脑门就定了。
On Oct 10, 2012 4:11 PM, "Liigo Zhuang" <com....@gmail.com> wrote:
> 同一个pkg允许多个init函数并存,本身就是不靠谱的设计,完全是没有必要的,也与golang一贯的设计准则不符。不知道是哪个家伙一拍脑门就定了。
拜托您下次过来黑Golang请好好准备好您的理由。
您这句话把"同一个pkg允许多个init函数并存"换成某个
语言L的某个特性F,然后把golang替换成L,然后这句话
可以说任何语言L的任何特性F是有问题的。
要想继续讨论,请说明为什么不靠谱,没啥没必要,
golang的设计风格是什么,哪个不符合? 给点细节,
别用这么空洞抽象的说辞。
五毛分子,迫不及待的跳出来护主。而且你也没说出什么“靠谱”的理由,一味的人身攻击。什么叫“黑golang”?莫名其妙。批评它“不靠谱”还不准许?用“护主”形容你真是恰到好处。
下面我来说说它“不靠谱”的理由:golang连函数重载都不支持,多个同名的init函数并存本身就是怪胎; golang连一个未被使用的变量声明都不能容忍,却生生允许多个重复的init; 只要一个init就足够达到目的,多了明显就是画蛇添足,还无谓的引入了无解的“初始化顺序”问题,把原本简单的事情复杂化。各种突兀、不合逻辑。理由早就准备好了:“完全是没有必要的”,上面只是展开叙述。
golang嘛,只不过是一门冰冷的编程工具,犯得着满腔热血的护它、黑它么?什么都说不过一个理字。一味护主比真心黑更可怕。最后实在说不过了,无非丢来一句“不喜欢别用”!────依然是护主的心态。可他知道主子是一定拒绝长进的么。
--
--
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina