首页 > 编程语言 >PHP 程序员转 Go 语言的经历分享

PHP 程序员转 Go 语言的经历分享

时间:2024-06-20 23:31:08浏览次数:26  
标签:语言 学习 程序员 Go PHP 模仿 进阶

大家好,我是码农先森。

之前有朋友让我分享从 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 语言的正确道路。

推荐


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

标签:语言,学习,程序员,Go,PHP,模仿,进阶
From: https://blog.csdn.net/yxhbk/article/details/139710951

相关文章

  • golang interface guard 技术(接口守护)
     Go代码的接口守卫(interfaceguards)技术,通常用于库的开发,以确保类型符合预期的接口。 下面示例的Interfaceguards确保App类型实现了caddy.App、caddy.Provisioner和caddy.Validator接口。具体来说,它通过将(*App)(nil)转换为这三个接口的类型,并将其赋值给匿名变量......
  • 基于Springboot的CSGO赛事管理系统(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的CSGO赛事管理系统(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统......
  • golang 爬虫修炼02 ---协程、互斥锁、读写锁、waitgroup
    协程程序:为了完成特定任务,使用某种语言编写的一组指令的集合,是一段静态的代码进程:是程序的一次执行过程。正在运行的一个程序,进程作为资源分配的单位,在内存中会为每个进程分配不同的内存区域。进程是动态的,有产生、存在、消亡的过程线程:进程可进一步细分为线程,是一个程序......
  • Dragon Boat Festival Revised
    InChina,theDragonBoatFestivaliscelebratedonday5ofthefifthmontheveryyearaccordingtotheChineselunarcalendar.EveryyearontheDragonBoatFestivalday,wegetupearlyandgetdowntomakezongzi.Weaddmeatorredbeansintoitdepe......
  • Dragon Boat Festival Revised
    FestivalPreparationDuringtheDragonBoatFestival,ourfamily'spreparationsalwaysexudeastrongsenseofritual.Wehangwormwoodandcalamusathome,intendingtodriveawayevilspiritsandprayforthewell-beingofourfamily.Thistraditio......
  • 基于django的灾害监测系统
    说明技术栈:开发框架:Django前端:boostrap、ajax、JavaScript后端:python数据库:redis、postgresql前期工作安装PostgreSQL安装Redis创建第一个页面创建Django项目运行测试pythonmanage.pyrunserver创建apppythonmanage.pystartappapp1将app1注册添加到setting......
  • Go语言中的位运算符
    位运算(bitwiseoperations)是计算机科学中非常基础且重要的运算类型,它直接操作二进制位。Go语言中提供了一组位运算符,用于执行位级别的操作。Go语言中的位运算符按位与(&):作用:对两个操作数的每个位进行与运算,只有对应位都为1时,结果位才为1。示例:5&3(0101&0011=0001),结果......
  • CentOS7系统搭建web环境 php&nginx&pgsql
    环境:VMware、CentOS-7-x86_64-DVD-2009.iso、nginx-1.26.1、php-7.2.0、postgresql-12php最好安装对应php项目所需版本,否则会出现不兼容问题。一、VMware安装CentOS7操作系统下载LinuxCentos7映像:https://mirrors.aliyun.com/centos/7/isos/x86_64/?spm=a2c6h.25603864.0.......
  • gocv安装教程(简单版)
    环境:Windowsopencv:未安装官网教程介绍:参考gocv官网教程进行安装即可,用gocv官网给的一键脚本进行安装安装MinGW-W64和cmakeMingw版本在8.1以上,手动安装需要添加环境变量cmake官网scoop用户可以直接运行以下指令安装scoopinstallmingwscoopinstallcmake一键安装open......
  • 记录pyinstaller打包django项目遇到的坑
    由于工作需要,需要在内网部署一个Django项目生成exe,打包过程遇到了不少坑,在此记录一下。一、安装pyinstaller略。二、打包exe第一个问题:用pyinstaller-F-w生成的exe报错一开始用的是以下命令生成exe:pyinstaller-F-wxx.py导出完毕后,在dist/manage/目录下输入manage.......