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

在PHP中我们可以透过 date() 像这样取得目前的日期 。
在Golang就稍微有趣点了 , 因为Golang中并不是以 Y-m-d 这种格式做为定义 , 而是 1 、 2 、 3 ,这令你需要去翻阅文件,才能够知道 1 的定义是代表什么 。
俗话说:「爆炸就是艺术」,可爱的PHP用词真的很大胆 , 像是: explode() (爆炸)、 die() (死掉) , 回归正传,如果你想在PHP里面将字串切割成阵列,你可以这么做 。
简单的就让一个字串给「爆炸」了,那么Golang 呢?
对了,记得引用 strings 套件 。
这真的是很常用到的功能,就像物件一样有着键名和键值,在PHP 里面你很简单的就能靠阵列(Array)办到 。
真是太棒了,那么Golang呢?用 map 是差不多啦 。如果有必要的话,你可以稍微复习一下先前提到的「多资料储存型态-Stores」 。
你很常会在PHP里面用 isset() 检查一个索引是否存在,不是吗?
在Golang里面很简单的能够这样办到(仅适用于 map ) 。
指针(有时也做参照)是一个像是「变数别名」的方法,这种方法让你不用整天覆盖旧的变数 , 让我们假设 A = 1; B = A; 这个时候 B 会复制一份 A 且两者不相干,倘若你希望修改 B 的时候实际上也会修改到 A 的值 , 就会需要指针 。
指针比起复制一个变数,他会建立一个指向到某个变数的记忆体位置,这也就是为什么你改变指针,实际上是在改变某个变数 。
在Golang你需要用上 * 还有符号 。
有些时候你会回传一个阵列,这个阵列里面可能有资料还有错误代号,而你会用条件式判断错误代号是否非空值 。
在Golang中函式可以一次回传多个值 。为此,你不需要真的回传一个阵列,不过要注意的是你将会回传一个属于 error 资料型态的错误,所以你需要引用 errors 套件来帮助你做这件事 。
该注意的是Golang没有 try .. catch ,因为 Golang推荐这种错误处理方式 ,你应该在每一次执行可能会发生错误的程式时就处理错误,而非后来用 try 到处包覆你的程式 。
在 if 条件式里宣告变数会让你只能在 if 内部使用这个变数 , 而不会污染到全域范围 。
也许你在PHP中更常用的会是 try .. catch,在大型商业逻辑时经常看见如此地用法,实际上这种用法令人感到聒噪(因为你会需要一堆 try 区块):
Golang中并没有 try .. catch,实际上Golang也 不鼓励这种行为 (Golang推荐逐一处理错误的方式),倘若你真想办倒像是捕捉异常这样的方式,你确实可以使用Golang中另类处理错误的方式(可以的话尽量避免使用这种方式): panic() ,recover() ,defer。
你可以把 panic() 当作是 throw (丢出错误),而这跟PHP的 exit() 有87%像 , 一但你执行了 panic() 你的程式就会宣告而终,但是别担心,因为程式结束的时候会呼叫 defer,所以我们接下来要在 defer 停止 panic()。
关于 defer 上述已经有提到了,他是一个反向执行的宣告,会在函式结束后被执行 , 当你呼叫了 panic() 结束程式的时候,也就会开始执行 defer,所以我们要在 defer 内使用 recover() 让程式不再继续进行结束动作,这就像是捕捉异常 。
recover() 可以看作 catch (捕捉),我们要在 defer 里面用 recover() 解决 panic() ,如此一来程式就会回归正常而不会被结束 。
还记得在PHP里要引用一堆档案的日子吗?到处可见的 require() 或是 include() ?到了Golang这些都不见了 , 取而代之的是「套件(Package)」 。现在让我们来用PHP解释一下 。
这看起来很正常对吧?但假设你有一堆档案,这马上就成了 Include Hell  , 让我们看看Golang怎么透过「套件」解决这个问题 。

推荐阅读