你可以把 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怎么透过「套件」解决这个问题 。
「 蛤???杀?。浚浚?」你可能如此地说道 。是的 , main.go 中除了引用 fmt 套件( 为了要输出结果用的套件 )之外完全没有引用到 a.go。
「 蛤???杀?。浚浚浚浚浚?」你仿佛回到了几秒钟前的自己 。
既然没有引用其他档案,为什么 main.go 可以输出 foo 呢?注意到了吗, 两者都是属于 main 套件 , 因此 他们共享同一个区域 ,所以接下来要介绍的是什么叫做「套件」 。
套件是每一个 .go 档案都必须声明在Golang原始码中最开端的东西,像下面这样:
这意味着目前的档案是属于 main 套件( 你也可以依照你的喜好命名 ) , 那么要如何让同个套件之间的函式沟通呢?
接着是Golang;注意!你不需要引用任何档案,因为下列两个档案同属一个套件 。
一个由「套件」所掌握的世界,比起PHP的 include() 和 require() 还要好太多了,对吗?
在Golang 中没有引用单独档案的方式 , 你必须汇入一整个套件 , 而且你要记?。骸敢欢慊闳肓耍憔鸵欢ㄒ褂盟? ,像下面这样 。
假如你不希望使用你汇入的套件,你只是为了要触发那个套件的 main() 函式而引用的话?? , 那么你可以在前面加上一个底线( _ ) 。
如果你的套件出现了名称冲突,你可以在套件来源前面给他一个新的名称 。
现在你知道可以汇入套件了,那么什么是「汇出」?同个套件内的函式还有共享变数确实可以直接用,但那 并不表示可以给其他套件使用 ,其方法取决于 函式/变数的「开头大小写」。
是的 。Golang依照一个函式/变数的开头大小写决定这个东西是否可供「汇出」。
这用在区别函式的时候格外有用,因为小写开头的任何事物都是不供汇出的 , 反之,大写开头的任何事物都是用来汇出供其他套件使用的 。
一开始可能会觉得这是什么奇异的规定,但写久之后,你就能发现比起JavaScript和Python以「底线为开头的命名方式」还要来得更好;比起成天宣告 public 、 private 、 protected 还要来得更快 。
在Golang 中没有类别,但有所谓的「建构体(Struct)」和「接口(Interface)」,这就能够满足几乎所有的需求了,这也是为什么我认为Golang 很简洁却又很强大的原因 。
让我们先用PHP 建立一个类别 , 然后看看Golang 怎么解决这个问题 。
虽然Golang没有类别,但是「建构体(Struct)」就十分地堪用了,首先你要知道在Golang中「类别」的成员还有方法都是在「类别」外面所定义的,这跟PHP在类别内定义的方式有所不同,在Golang中还有一点,那就是他们没有 public 、 private 、 protected 的种类 。
推荐阅读
- 全国角色扮演游戏,全国角色扮演游戏有哪些
- sqlserver特有的函数,sql server函数写法
- 微博最开始的直播叫什么,微博最开始是干嘛的
- mysql密码错误怎么 mysql修改密码错误
- 上海防水电脑连接线怎么用,上海防水科技有限公司
- 游戏点击小鸟飞行,点击小鸟就飞的游戏
- 护肤直播软件,护肤品直播平台
- c语言求函数极值 c语言求级数
- 如何注册佛山电商执照网店,佛山电商网站建设