php需要转go语言吗 php有必要转java吗( 二 )


先撇开PHP 的「万能阵列」不管 , Golang 中的阵列既单纯却又十分脑残,在定义一个阵列的时候,你必须给他一个长度还有其内容存放的资料型态 , 你的阵列内容不一定要填满其长度,但是你的阵列内容不能超过你当初定义的长度 。
切片??这听起来也许很奇怪 , 但是你确实可以「切」他,让我们先谈谈「切片」比起「阵列」要好在哪里:「你不用定义其最大长度,而且你可以直接赋予值」 , 没了 。
我们刚才有提到你可以「切」他,记得吗?这有点像是PHP中的 array_slice() ,但是Golang直接让Slice「内建」了这个用法 , 其用法是: slice[开始:结束]。
在PHP中倒是没有那么方便,在下列PHP范例中你需要不断地使用 array_slice()。
你可以把「映照」看成是一个有键名和键值的阵列,但是记?。骸改阈枰孪榷ㄒ迤浼⒓档淖柿闲吞梗馊韵拗颇忝话旆ㄔ谟痴罩写娣哦嘀植煌吞淖柿?。
在Golang里可就没这么简单了,你需要先用 make() 宣告 map。
也许你不喜欢「接口」这个词,但用「介面」我怕会误导大众,所以,是的,接下来我会继续称其为「接口」 。还记得你可以在PHP 的关联阵列里面存放任何型态的资料吗,像下面这样?
现在你有福了!正因为Golang中的 interface{} 可以接受任何内容,所以你可以把它拿来存放任何型态的资料 。
有时候你也许会有个不定值的变数 , 在PHP 里你可以直接将一个变数定义成字串、数值、空值、就像你那变心的女友一样随时都在变 。
在Golang中你必须给予变数一个指定的资料型别 , 不过还记得刚才提到的:「Golang中有个 interface{} 能够 存放任何事物 」吗( 虽然也不是真的任何事物啦?? )?
当我们程式中不需要继续使用到某个资源或是发生错误的时候,我们索性会将其关闭或是抛弃来节省资源开销,例如PHP 里的读取档案:
在Golang中,你可以使用 defer 来在函式结束的时候自动执行某些程式(其执行方向为反向) 。所以你就不需要在函式最后面结束最前面的资源 。
defer 可以被称为「推迟执行」,实际上就是在函式结束后会「反序」执行的东西,例如你按照了这样的顺序定义 defer : A-B-C-D  , 那么执行的顺序其实会是 D-C-B-A ,这用在程式结束时还蛮有用的 , 让我们看看Golang如何改善上述范例 。
这东西很邪恶,不是吗?又不是在写BASIC , 不过也许有时候你会在PHP 用上呢 。但是拜托,不要 。
Golang中仅有 for 一种回圈但却能够达成 foreach 、 while 、 for 多种用法 。普通 for 回圈写法在两个语言中都十分相近 。
在Golang请记得:如果你的 i 先前并不存在,那么你就需要定义它 , 所以下面这个范例你会看见 i := 0。
在PHP里, foreach() 能够直接给你值和键名,用起来十分简单 。
Golang里面虽然仅有 for() 但却可以使用 range 达成和PHP一样的 foreach 方式 。
一个 while(条件) 回圈在PHP里面可以不断地执行区块中的程式,直到 条件 为 false 为止 。
在Golang里也有相同的做法,但仍是透过 for 回圈,请注意这个 for 回圈并没有任何的分号( ; ),而且一个没有条件的 for 回圈会一直被执行 。
PHP中有 do .. while() 回圈可以先做区块中的动作 。
在Golang中则没有相关函式,但是你可以透过一个无止尽的 for 回圈加上条件式来让他结束回圈 。
要是你真的希望完全符合像是PHP那样的设计方式,或者你可以在Golang中使用很邪恶的 goto。
【php需要转go语言吗 php有必要转java吗】

推荐阅读