php与golang的学习感受

本文主要讲述php与golang的一些区别

前言

在学习一门比较新的语言时候,就像看着孩子长大一样,虽然有很多功能很棒,但是很多东西同样很不完善。

写这篇文章的时候用的是 go 1.14版本 !
写这篇文章的时候用的是 go 1.14版本 !
写这篇文章的时候用的是 go 1.14版本 !

包管理

以前php是用composer管理包的,很方便,然后包是放在项目下vendor目录,然后一开始golang的包是放在中央,也就是所有项目的包都放在一个位置,很不习惯,但是后来想了想python的包也是放在一个位置的呀,包管理难用是因为go之前包管理没有版本管理和其它原因,好在现在官方出了go module,包管理方便了很多。

泛型

php是动态语言,所以就没有泛型这些概念,泛型是静态语言的概念,可以说泛型是静态语言为了提高开发效率做的一个东西。

interface能够接收任何类型的参数,那他是不是泛型呢
在这里插入图片描述
如图可以看出a和b是无法做运算的,
但是可以通过interface自己实现简单的泛型
https://zhuanlan.zhihu.com/p/74525591

关于泛型可以看一下这个视频
https://www.bilibili.com/video/BV1k7411R7ya

听说go2就要出泛型了,其实这是有一个平衡点的,要出泛型,编译系统就会变得复杂起来,运行效率也会降低一些。在很多年前,go官方就着手设计泛型了,只是还没设计出一个比较好的泛型。

错误处理与异常

try-catch

golang没有try-catch,从网上各种说try-catch不好,也有说try-catch好的,有从性能角度考虑的,有代码健壮性考虑的等等方面。

我的感觉是try-catch挺好的,借用网友的一句话。

只有错误可预知时才用try。所有不可预知的错误用try都是不负责任的写法

就比如,因为服务器性能不行,数据库时不时出现连接失败,那我先用try catch先保证系统的稳定性,然后去解决性能的问题,所以这个问题是预知的。
那假如我不知道会有什么错误,我就强行加个try catch,只能说明懒的去解决错误了。
如果是代码的问题导致的bug,那说明你没对代码进行全面的测试。
如果是系统性能的问题,那说明你对系统的没有很好的了解。

那其实我们平时也很少用try-catch。

错误处理

首先go的错误处理首先让我们感觉就很多

if err != nil {
	fmt.PrintLn("错误")
}

go函数一般有两个返回值,第二是err,这样把逻辑和错误区分开来,挺好的,当然你不想处理你可以用下划线“_”过掉。那根之前其实没有太大的区别。

golang没有类的概念,但是可以通过结构体和函数来实现,结构相当于定义类的字段,函数相当于成员方法。
golang没有继承,但是可以通过结构体嵌入实现类似的功能。
golang也没有 private,public这些关键字,而是通过函数名首字母大小写区别,大写就是开放,小写就私有。

多线程

以前用php想用多线程的时候折腾了一会,很麻烦,后来改用go写了,自带语言级别的多线程确实很香。go开启的是协程,协程和线程有些区别。

语法糖

defer

在代码前加上defer关键字,这段代码就会在整个函数结束之后运行。这有一个好处就是,比如你打开了数据库,就立马在下面写上defer db.Close(),就能够很好避免因为忘记写关闭代码导致的问题。至于还有没有其它作用就看后面慢慢学习了。golang 的多返回值语法糖避免了这种方式带来的不便,错误值一般作为返回值列表的最后一个,其他返回值是成功执行时需要返回的信息

多返回值

多返回值,可以使返回值进行拆分,不至于聚集在一个返回值,会乱。

其它

变量类型放在了变量后面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值