乐趣区

关于php:我是如何从-php-转型写-go-的

原本想连续上一个公众号 << 不定期更新的日常 >> 系列,然而想想还是先写下这篇吧。心愿对那些刚转型 Go 或者有动向转型的小伙伴有所帮忙。

终点

去年七月初的时候,在上家公司感觉到毕业以来第一次瓶颈,加上小公司我的项目半凉的状态,随即提出到职。在交接的过程中,我开始投递简历进去面试,因为学历并不是很好,加之在开源世界并没有什么拿得出手的我的项目,也就没对大厂抱有心愿,整个期间就面了三家公司,拿了其中两家 offer,一家做直播的,一家做电商行业的,抉择了电商的那家,不算很大,一千多人还是有的,而后就实现了到职到就任的无缝连贯,当初入职半年多了。

面试的时候面的就是 php 岗位,因为也没别的语言教训,入职第一周没有具体的工作安顿,就是相熟环境。第二周开始接了点小需要,评审之后看了下也不是很难。不过新公司第一次上线多少还是有点忐忑的,好在没出啥问题,一切正常。

来到八月份,因为咱们做的是一个全新的我的项目,我开始搭建一些根底的,和业务没什么牵扯的模块,还对接了一些平台。

大略到九月初的时候,因为某种场景不太适宜应用 php,加上咱们无意识的想把纯业务的和底层通用模块做拆散。理解到其余部门在搭建他们的中台业务也是把技术栈从 php 迁徙到 Go,加上外部也有专门的部门去搭建 Go 框架、封装专用进步业务开发效率的包……,而后老大就过去问我,有没有动向搞 Go,我的答复是求之不得!!!

我大略花了一天的时候,过一下语法。我之前提到过,看了学院君的 Go 入门教程。简略的把下面的根底语法过了一遍,全程敲下来。因为之前有偷偷学过一点,所以没花多少工夫就复原了之前为数不多的功力。这时候曾经能看懂这样简略的代码了。

package main

import "fmt"

func main() {go func() {fmt.Println("打印不?")
  }()}

如果你始终寂静在 php-fpm 那一套,导致的景象可能是你不晓得下面的运行后果。别不信,好多人真的不晓得为什么,当然我没有黑语言的意思。

接着因为公司外部的框架有基于 gin。我就把 gin 官网的 demo 本人全敲了一遍,我也倡议你这样干。初学者,要学会从模拟做起,模拟当然就是入手操作。

而后老大就让一个大佬给我开了一个基于公司外部框架构建的一个业务我的项目,不是很大,我跑下来之后,依据 readMe 进行系列操作,运行过程也有点崎岖,还踩到一个坑,虚心求教了大佬后才解决。依据这个我的项目去理解它的运行流程、生命周期以及波及到的知识点……,这时候千万不要陷入代码细节,细节是魔鬼!

大略过了三天,我就开始入手写咱们部门的我的项目了,始终写到当初。这个过程很乏味,我常常在后一天发现前几天实现的并不好,而后就是继续重构,继续调整。

我是咋么发现的呢?

当然是学习!首先,那段时间除了在公司实现需求过程中,遇到 Go 相干不明确的点,比方包之类的,那就去官网搜,或者看一些文章。遇到外部框架不明确的中央,就去求教大佬,大佬对我总是那么和颜悦色。

上班后,我也没闲着,疯狂的补充 Go 相干的常识,记得我有次看 sync.Mutex 外面定义的常量不明确,前面就专门去查了材料。其实是很根底的货色,代码如下,

const (
    mutexLocked = 1 << iota // mutex is locked
    mutexWoken
    mutexStarving
    mutexWaiterShift = iota

)

func main() {fmt.Println("mutexLocked 的值",mutexLocked)
    fmt.Println("mutexWoken 的值",mutexWoken)
    fmt.Println("mutexStarving 的值",mutexStarving)
    fmt.Println("mutexWaiterShift 的值",mutexWaiterShift)
   // 为什么后果是:
// mutexLocked 的值 1
// mutexWoken 的值 2
// mutexStarving 的值 4
// mutexWaiterShift 的值 3
}

想想那时候就乏味。

书籍

当然也要看书,我是在去年 12 月初晓得的,公众号 polarisux 回复 ebook,Go 从入门到进阶的书都有。

图片

首先,书并不是越多越好,等你看完相干的书你会发现很多书的知识点同质化。

这时候你要做的是什么?

除了排汇根底的常识之外,我还会做一个乏味的事件,就是看两本书对于雷同的知识点的不同论述,而后你就会发现 A 书未提及的 B 书做了补充,B 书脱漏的点 A 书补上了,

乏味吧?当然了,如果你能延长出它们都未曾提及的,那么,请收下我的膝盖。

我看书有个习惯,并不会从头看到尾。我认为,一本书并不是每一章都对我有价值,因人而异。

我会选择性地进行浏览,对我目前有帮忙的或者我须要去把握落地到具体工作中的,重点去细读,精读。并且入手去实际以及输入本人的思考。

在读一本书的时候,肯定是带有目的性的,读完要失去什么?是否能够施展到工作?看完了,我能把握它的用法吗?最好画一个相似思维导图,等读完书后,回过头看思维导图,这些知识点都把握了吗?

源码

而后就是看源码。

当咱们不晓得怎么去写好的代码,就须要去学习优良的人是如何设计代码的,能够设想同一个场景,你会如何设计代码?再看看他人是如何设计的,比照下,差距大吗?

我比拟喜爱看他人的代码,惋惜目前看的还不够多。然而有过从头到尾把一个小而精我的项目的源码看完,有些常识不肯定当场就能排汇,须要缓缓去消化。

看源码最避讳的就是一上来就陷入代码细节,切记!

对我来说,当我去看源码的时候,不论是 Go 自身的,还是第三方包,首先我必定是曾经在应用了,曾经晓得它的用处,利用场景以及一些应用上的操作,这是前提。

而后须要晓得它的整体架构,这个个别我的项目都会有一个大略介绍,它的模块组成,他们之间的关系、交互,大略就这些,而后分模块去浏览源码,这个过程中,你就能缓缓去浏览作者的设计,你就能理解到作者更多的细节,再联想到本人,都写的啥?

总结
这篇文章大体介绍了一下我四个多月的 Go 之路,心愿对你有所帮忙。另外,我想说的是,学习并不是长跑,它并不会短时间内疾速达到起点,更确切的说,它没有起点。

学习是须要通过继续一直的积攒,才会引发量变。学习形式也并没有固定的模板,你须要找到一种最适宜本人的形式,而后把头埋下来,保持。在你累的时候,不要遗记抬起头,看看后面的路。共勉!

退出移动版