一个 PHP 程序猿学习 Go 的体悟

正文开头先来一口鸡汤

没有什么事情是一蹴而就的,要想取得成绩,那就努力吧。
                                        - 敬“明天”

为什么想学Go

要谈论学习心得,首先就得谈谈我为什么要来学习Go语言了。
首先我总结了几点原因:

  • PHP并发支持不好,就算是有了swooleworkerman等扩展,依旧杯水车薪
  • PHP对微服务的支持不行
  • PHP在大型企业不能满足使用需要
  • Go语言最近几年火变国内外
  • Go原生并发支持
  • Go入门使用简单
  • Go第三方扩展丰富

好吧,看到这里的朋友,肯定会说我又在水文了,或者说我在挖PHP的坑。

首先声明,我没有说PHP不好,可能是我太菜,知识面太浅薄,勿怪。

Go作为一门新兴语言中的佼佼者,而作为一门新兴语言能在国内快速崛起和形成趋势,必然有它可取之处,作为新时代的程序猿,咱们不应该存有语言偏见,有好的咱需要了解和学习。
也是抱着这样的态度,我开始了Go语言的了解和学习历程。

首先讲讲不一样的地方

PHPGo其实都算是或多或少的使用和保留了一部分的C语言痕迹,当然在其中,Go语言看起来更为明显,毕竟Go是一门强编译性语言,定义变量或者方法体时,需要严格的声明其类型,程序完成需要运行时,需要先进行代码编译,生成可执行的文件,然后再运行可执行文件,方可以查看程序运行结果。

然后我也总结了一下不一样的地方,如下:

(如有缺少,请大家补充说明)

  • 文件后缀名不同
  • 代码命名空间声明不同
  • 引入第三方扩展不同
  • 声明变量格式不同
  • 变量类型也有不同
  • 方法定义不同(请注意:Go中私有、公开、受保护定义方式)
  • 流程控制和循环控制语句使用上也有些许不同
  • 执行方式不同(上文说了,PHP是解释性弱语言,Go是强编译性语言)

好了,整了这么一大堆,我想大家看了也有点懵比和反诬,再想到底这门语言好学吗,或者说是PHP好不好转Go语言。

我想这个问题,我不需要回答,因为Go语言的现有程序猿里,可能有百分之40%是从PHP过渡的。
所以我想不需要解释说明什么了。

聊一聊OOP吧

本小节更新于:2020-4-11

phper们都知道,现如今PHP编程的核心思想就是面向对象(OOP),因为面向对象的思维和概念,给予了人们很多新鲜的思维和想法,可以把很多事物的共同体抽象出来,形成一种事物模型,在通过模型的封装继承多态来实现具体的实物模型功效,毫无疑问这是一件非常好切重要的概念或者编程思维。

但事实上,上帝给你打开一扇窗的时候,往往会在墙角挖上一个深坑,你要是不能好好地去思考与观察,就会毫无疑问的跳进坑里,以至于无法自拔,更无法怪及他人。

面向对象(OOP)在编程高手眼里是一个魔术师,可以化腐朽为神奇;但是在小白眼里这个只起到简单的聚合作用,甚至于在学习与观察时,因为初入时间较短,看不清形势,导致直接挖坑把自己埋了。

所以再好的东西,都是一把双刃剑,请注意你使用的方式,不要把自己放到深渊之内。
但请你也不要害怕犯错,要勇敢尝试新事物,不过这一切的前提是,你要分得清重要性。

go编程设计时,其实就充分思考过这个问题,因为上天虽然是独爱某些天资聪慧的人们,但也不会让没有天赋的人,毫无入门之路一说,所以go语言在设计时,就只保留了最简洁的类的概念,去掉繁琐OOP思想,只是为了让语言更简洁、更方便学习和阅读以及工作交流。

举个例子:

定义一个用户类,具有电话属性,以及一个打电话的功能,分别用PHPGO实现。

PHP

<?php
class User{
    public $phone;
    public function calling(){
        echo "我可以拨打电话";
    }
}

GO

package main

type User struct {
    phone string
}

func (U *User) calling(){
    print("我可以拨打电话");
}

注解

划重点: Go 没有类似于 PHP 中的 Reflection相关的构思与实现。

虽然 GO 本身是没有做这方面的构思与实现,但是有很多扩展和第三方包通过反解析Go doc 来完成了此项功能。

以下举例:

这里只是说明以下内容实现了注解解析的内容。

  • Beego
  • Iris
  • swag

其实,在这一个点上,个人比较倾向于PHP哈,虽然没有JAVA的注解来的标准化,但是对于平民玩家更容易理解与构思哈,至少可以通过函数与类的实例,调取并解析注解的内容,而Go注解相关的解析成本就高的多了。

最后嘟囔一句:以上均为个人看法和理解,如有不同意见,请在评论区留下你的建议和指教。

待续

本文未完待续,因为旧梦也需要不断地学习,才能更好的更新….

后记

最后说一句:

有人的地方,就有江湖。有需求支配,才能迅速学习。

盼共勉,祝君荣登极道。

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 3年前 自动加精
讨论数量: 10

极客兔兔的 7 天系列感觉很适合从 PHP 转 Golang 的程序员,分享给你。 https://geektutu.com/post/gee.html

4年前 评论
旧梦与故人 (楼主) 4年前

之前学习了基础语法和数组、切片、结构体等基础的东西。还只是停留在语法层面,不知道如何的进阶下去。有点烦恼,平时工作 依然是PHP。基本上使用不到go

4年前 评论
旧梦与故人 (楼主) 4年前
Klein 4年前
NoTurningBack 2年前

我是从 python 转到 Go 的。之前已能用 python 写基础的 web 和爬虫,以及一些日常的小脚本。学 Go 的起因是因为,python 的并发编程我一点都看不懂(我自己捉急的智商)。2018 年还在入门 python 的时候,听闻了 Go 的大名和它彪悍的性能,知道 Go 是比较晚了。19 年年底,下定决心开始学 Go。从 python 切换成 Go,确实有诸多的不习惯,总是习惯用 python 的思维模式去思考 Go,结果吃了很多亏。从 19 年的 12 月开始到现在,5 个月了,其间是断断续续学的。
从我自己入门菜鸟的角度来看 python 和 Go,我更加喜欢 Go。
python 的强制缩进确实可以培养良好的编码习惯,但代码一多,就会很乱,然后容易出错。
python 动态语言,编码速度是真心快,Go 没法比。但 python 的类型检测很是操蛋,很多情况下程序崩了,才晓得哪个类型搞错了。Go 绝大部分情况下能够在编译时,就能检测到类型错误。
最重要的就是性能、性能,还是性能。python 被 Go 吊打。
python 的优势:极简入门,对小白真的很友好;学习曲线非常很平滑,如丝般柔顺;第三方库最多的编程语言,没有之一;编码效率相当之高。其他方面都是被 Go 吊打。

4年前 评论
root01 (作者) 4年前
旧梦与故人 (楼主) 4年前
旧梦与故人 (楼主) 4年前

:+1:,我觉得精通一门语言后,再上手另外一门语言并不是难事。我要把PHP用的像用筷子一样熟练,再去学GO。最重要的还是要把基础打牢,网络、算法、编译原理等等,一起加油。

4年前 评论
旧梦与故人 (楼主) 4年前
wangchunbo

你在凝视语言的时候,语言也在凝视着你。

4年前 评论
wangchunbo (作者) 4年前
旧梦与故人 (楼主) 4年前
旧梦与故人 (楼主) 4年前
wangchunbo (作者) 4年前
旧梦与故人 (楼主) 4年前

我最近也在学习go语言,刚开始学,因为我想跳槽的一家公司要求会这个,不知道能不能学好 :joy:,最近都是边工作边学

3年前 评论
旧梦与故人 (楼主) 3年前

支持一波,一门主语言一门副语言,完美

3年前 评论
旧梦与故人 (楼主) 3年前
pan_zoe (作者) 3年前
旧梦与故人 (楼主) 3年前

跟lz同为PHP->GO.公司项目没有什么PHP的事。自己规划几个方面其中有GO。要说感觉和PHP比最不爽的是组织结构题 :joy:。目前我做的东西配置项比较多,让我怀念随意变换类型的时光。

3年前 评论
旧梦与故人 (楼主) 3年前
chenweil (作者) 3年前
旧梦与故人 (楼主) 3年前

go现在有反射功能啦。

3年前 评论
旧梦与故人 (楼主) 3年前

PHP / workerman and swoole,并不是杯水车薪吧

2年前 评论
旧梦与故人 (楼主) 2年前
Evilk (作者) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!