在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怎么透过「套件」解决这个问题 。
- 纯phpmysql
- 查找php.ini phpredis查找
- redis集群存储数据策略 redis集群数据流转
- mongodb聚合查询优化 mongodb聚合运算需要索引吗
- php7连接mysql php连接mysql源码
- mysql主键需要加索引吗 mysql加主键过程原理
- mysql 转数值 mysql表转枚举类
- mysql需要花钱吗 mysql什么情况下免费
- mysql转换字符类型 mysql语句中转义
- mongodb服务启动需要管理员权限吗 mongodb服务启动
