大家好,我是码农先森。

之前有朋友让我分享从 PHP 转 Go 的经历,这次它来了。我主要从模仿、进阶、应用这三个方面来描述转 Go 的经历及心得。模仿是良好的开端,进阶是艰难的成长,应用是认知的提升。希望我的经历对大家能有所启发。

模仿

著名艺术家毕加索说过「模仿是人类一切学习的开端,然后才是创新,最后是你的自主」。在我国军事的发展上有一个典型的例子,第一艘新航母模仿的就是辽宁号航母,这促使我们更加容易理解:先模仿,再创新,后超越的路子。大到国家尚且如此,那么小到个人更应该充分认识到「模仿」的价值。模仿是人类固有的天性和本能,大家小时候经常会模仿大人模样,比如学大人的说话口气、做各种动作等等。

在我学习 Go 语言的过程中,也正是利用了「模仿」这种技巧,比如把 Go 中的结构体 Struct 对标成 PHP 中的 Class、把 Go 中的接口 Interface{} 对标成 PHP 中的抽象类 Abstract Class、把 Go 中的结构体指针 Pointer 对标成 PHP 中的类对象 This、把 Go 中的 Gin 框架对标成 PHP 中的 ThinkPHP 框架等等。我刚开始在熟悉了 Go 的语法后,力争都要能在 PHP 中找到相应的影子。然后使用 PHP 的框架 ThinkPHP 实现一个 CURD 的案例,再把这些功能利用 Go 的框架 Gin 实现一遍。语言绝大多数的区别都只是语法糖的不同,编程思想都类似,万变不离其宗。都说万事开头难,利用这个模仿的技巧实现这个案例之后,算是开了个好头,让自己有了简单的成就感,看到了相应的学习成果。最重要的收获是迈出了学习 Go 语言的第一步,克服了畏难思想。

进阶

模仿式学习只是掌握了表面知识,就好似练习咏春拳只学到招式,没有学到内功。要想修炼好内功,还得理解语言的本质区别。PHP 是解释型、动态类型语言,代码的运行是基于 Zend VM 虚拟机引擎,在 Web 领域应用广泛。Go 是编译型、静态类型语言,直接编译成二进制可执行文件便可运行,在高并发、云计算等领域应用广泛。PHP 在 Web 领域有着天然的优势生态完善,Go 的高并发性能突出,两者刚好互补,这也是我学习 Go 语言的主要原因。

让我真正感受到 Go 语言的与众不同,是在参与了一个物联网项目「基于IOT物联网在线直播抓娃娃」(文末附上了项目代码地址)的开发之后,这个项目开发了实时通信、视频推流、设备通信、用户分发等技术,这些技术都是基于 Go 语言的 goroutine、websocket、mqtt、channel、select 等特性实现的。实践出真知,真正的进阶是要在参与实战项目之后才能得到提升。当然我是有幸参与了这类项目,但大部分人却可能连参与实战项目的机会都没有,那应该怎么进阶呢?我的回答是「交流」,多与高手交流、向高手学习、听高手讲解。俗话说的好「听君一席话,胜读十年书」便是如此。和高手交流对我们的学习和成长很有益处,不仅有助于了解技术方向、关键的技术点,也可以通过观察和学习高手的技术思维、解决问题的方式。最后在进阶的路上还是得多寻找一些实践的机会,毕竟实践是检验学习效果的唯一标准。

应用

好钢要用在刀刃上,要充分了解 PHP 语言与 Go 语言的差异,才能在各自的场景中利用好 PHP 和 Go 的优势,避免出现杀鸡滥用宰牛刀、胡子眉毛一把抓的现象。在我之前的公司就有过这样的情况「立项前:高并发,日活千万,用xxx语言;上线后:停掉吧,一个用户都没有」,相信大家也遇到过类似的情况,最终项目的结果都是不了了之。

因此在实际的项目开发中,选择合适的技术是一项很重要的原则。比如在项目的初期利用 PHP 语言短平快的特性,快速的把项目推向市场进行试错,及时收集用户的反馈,推进项目的持续优化,当用户量达到预期的规划时,适时对部分访问频繁的接口,采用 Go 语言进行重构,以承载后期的访问量。技术选项和架构设计是随着业务的发展而进行演进的,不可能一蹴而就,有了这个认识后,才能发挥出 PHP 和 Go 各自的价值。

结语

其实想要更深入的学习好 Go 语言,还得花时间去巩固操作系统、网络通信等基础知识。有些普通 PHPer 可能连 多进程、协程、socket、epoll、tcp/ip 等概念都搞不清楚,只会用简单的框架套用模版,那何谈能把 Go 语言学好?这也就是有些人转 Go 语言失败的原因。真正学好 Go 语言并不容易,我从刚开始模仿式的学习,期间也踩过很多坑,限于篇幅原因没有展开,再到后来的进阶实践也是遇到各种编译错误,最后从应用层面来认知到学习 Go 语言的价值。我的学习经历并不适用于每个人,仅供大家参考,希望大家都能找到自己学习 Go 语言的正确道路。

推荐


欢迎关注、分享、点赞、收藏、在看,我是码农先森。

PHP 程序员转 Go 语言的经历分享的更多相关文章

  1. 苦逼三流小公司程序员这半年找工作经历(3)——选择offer

    本文按照企业规模.性质.规模,分成三类,点评一下遇到的这些公司.也算是为半年找工作经历的一个总结. 1,三流小公司 公司规模类似于笔者跳槽前所在企业,性质有外商独资.合资,当然大多数都是民营企业,规模 ...

  2. 10个足以让你成为更优秀的程序员的C语言资源

    一些人觉得编程无聊,一些人觉得它很好玩.但每个程序员都必须紧跟编程语言的潮流.大多数程序员都是从C开始学习编程的,因为C是用来写操作系统.应用程序最常用的语言. · C编程笔记 这些是华盛顿实验学院C ...

  3. .Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)

    过去几年都在忙着找项目,赶项目,没有时间好好整理深究自己在工作中学到的东西.现在好了,趁着找工作的这段空余时间,正好可以总结和再继续夯实自己的.Net, C#基本功.在05年的时候,Scott Han ...

  4. java程序员笑不死的经历ส้้้้้้้้้

    ส้้้้้้้้้้ส้้้้้้้้้้ส้้้้้้้้้ 1.程序猿最烦两件事,第一件事是别人要求他给自己的代码写文档,第二件呢?是别人的程序没有留下文档. 2.宪法顶个球!中国的法律都是.t ...

  5. 国外程序员整理的Java资源大全分享

    Java 几乎是许多程序员们的入门语言,并且也是世界上非常流行的编程语言.国外程序员 Andreas Kull 在其 Github 上整理了非常优秀的 Java 开发资源,推荐给大家. 译文由 Imp ...

  6. Java程序员转Android开发必读经验分享

    小编最近几日偷偷的发现部分Java程序员想转安卓开发,故此加紧补充知识,为大家搜集资料,积极整理前人的经验,希望可以给正处于困惑中的你,带来些许的帮助. 啰哩啰嗦的说说Java和Android程序的区 ...

  7. PHP程序员面试技巧之口试题分享

    网络上流传很广的一部分php工程师面试题目,有些phper们认为这些很形式,天下面试题目一大把,不能考核一个人的真实水平,其实细细研究起来,无论怎样,能存在就表明其有存在的价值.下面小编整理了12条P ...

  8. 黑马程序员_ C语言基础之指针(三)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 指针是C语言的精髓,但是很多初学者往往对于指针的概念并不深刻,以至于学完之后随着时间的推移 ...

  9. 黑马程序员_ C语言基础(二)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述):   1.Hello W ...

  10. 黑马程序员_ C语言基础(一)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 开发过程: 编写->编译(只编译源文件,编译成*.o  只会检测语法是否合理,不会检测函数是 ...

随机推荐

  1. [GPT] ./ssh/known_hosts 是什么

      ~/.ssh/known_hosts 是一个SSH客户端用来存储已知的远程主机的公钥的文件,这些公钥用于验证连接到远程主机时它们是否为真实可信的主机. 当你首次通过SSH连接到一个新的远程主机时, ...

  2. [FAQ] Error: com.mysql.jdbc.Driver not loaded. :jdbc_driver_library

    以上问题出现在 logstash.conf 未配置好 MySQL 的 JDBC 驱动时导致的错误提示. 首先,下载好 MySQL JDBC 驱动库,可以放到 logstash.conf 所在当前目录或 ...

  3. Ubuntu环境下docker每次都需要sudo的问题

    1.添加 docker 用户组 sudo groupadd docker 可以通过 cat /etc/group 指令查看存在的用户组 2.将当前用户添加到 docker 组中 sudo gpassw ...

  4. js实现一个拖拽效果(本例vue中),边界限定,获取鼠标坐标,div坐标

    有事没事搞个图: demo: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  5. vue--v-if和v-show的区别(个人项目中的理解应用)

    在面试的时候,一道vue基础到不能再基础的面试题叫做v-if与v-show的区别,当然答案网上一搜一大堆,基本两句话就能说明: 1.相同点:都是根据指令是否渲染该组件 2.不同点:v-if仅重新渲染当 ...

  6. 累计预扣法个税,怎么算?(附excel)

    累计预扣法个税计算 依法纳税是每个公民的义务,但看着每个月递增的个税,你可能会发出疑问,这到底是怎么算的?这就要引出2019年1月1日实施新实施的个税法,累计预扣法.即自2019年1月1日起,居民个人 ...

  7. 【爬虫数据集】李子柒YouTube频道TOP10热门视频的TOP2000热门评论,共计2W条

    目录 一.背景 二.爬取目标 三.结果展示 四.演示视频 五.附完整数据 一.背景 这段时间,有超多小伙伴找我要YouTube数据,做数据分析.情感分析之类的研究工作,但很多人并不是计算机软件相关专业 ...

  8. 面向教师的OBS直播速成教程

    引言 本文是面向教师讲述的如何使用OBS软件进行课程直播的速成教程. 本文配套视频链接如下️ 面向教师的OBS直播教学速成教程_哔哩哔哩_bilibili 环境准备 1. 下载对应本机系统版本的并安装 ...

  9. 在线自动加字幕!超快完成Pr的字幕制作!

    在线自动加字幕!超快完成Pr的字幕制作! https://www.bilibili.com/video/BV1T441167eX/?spm_id_from=333.788.videocard.3 ht ...

  10. 【C# 序列化】System.Text.Json.Nodes ---Json数据交换格式 对应C#类

    请先阅读 JSON数据交换格式 Json数据交换格式 对应C#类 System.Text.Json.Nodes:.NET 6 依微软的计划,System.Text.Json 应取代Newtonsoft ...