为什么踏上了Golang之旅?

原文来着 https://www.jianshu.com/u/ae33b518429a

作为一个 PHPer AND NODEer,最近踏上了golang的学习之旅。为什么做了这个决定呢?第一大厂都已经对php的抛弃了,虽然现在有swoole,可是大厂真的对它做了很好的支持嘛?不太懂,至少现在swoole的生态,和应用的场面是和node.js差不多的。

因为用习惯了laravel,有composer包的支持,所以现在好多国产PHP框架把JAVA 的那套Spring 微服务搞起来,也支持composer,可是并不像laravel那样原生的支持。如果你遇到了队列,[当然Swoole可以处理],redis,还有mongodb等一系列扩展的时候,你永远逃离不了的是,你必须安装PHP扩展,还有使用一些来阿里云服务的是PHP的SDK都是以HTTP API协议进行调用的,如果你的服务在高风期,有可能存在网络延迟问题。

比如你在使用队列的时候,你需要来在你现有的程序中,开另外一条php cli线程去跑[非swoole情况下],比如做定时任务,也是如此。好就好在。laravel以上都帮你提供了,不过等你项目做的很大的时候,你往往会忘记做一键事情,就是你的队列或者你做的定时任务,都会忘记重启服务。。。

很大PHP高玩的PHPer都意识到这个问题,所以他们会作出三种操作,

第一种是利用node.js一些特性辅助PHP,这类PHPer往往是出于中小企业的管理层,上年纪年纪。有家庭等等因素,他们会使用最少成本来达到目的

第二种是Swoole,这类人往往是资深软件工程师,当然他们不可能只会php这么简单,他还会c语言,等底层语言,他们甚者是可以开发框架的人。

第三种是要转型的人,这类人往往做的事情是项目的业务处理,他们既写程序,也写代码,还会梳理业务流程,甚者要做运维护。在他们眼里那个工具可以给他们提供好的解决方案,在团队种带来最高效益就会采用。当然这种角色,也只会存在小企业,大企业里这种角色估计是产品经理,或者技术顾问。虽然做事能力不是很精,可是他处理问题的能力你永远都比不上他们,甚者做的比较好的会把你提到的需求用专业的方案,直接把他pass掉。如果你跟的这种产品经理的团队,恭喜你,你会过的很开心。

至于我为什么要开始学习Golang,你们猜猜我是那类PHPer吧。

至于为什么学golang 因为它被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

其实最主要的一点,我还年轻

Golang的运行

我这边运行的Golang使用的Docker
我们首先需要一个Dockerfile,我个人喜欢debian 和 ubuntu 。当然golang 有很多方式,你们自己看着安装,我这里提供的是Docker的运行方式

# Dockeflie

FROM debian:jessie

COPY ./sources.list /etc/apt/sources.list

RUN  apt update \
&& apt install -y golang \
&& mkdir -p /go/src/app

WORKDIR /go/src/app

#sources.list
deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb http://mirrors.aliyun.com/debian-security stretch/updates main
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib

然后在vscode 打包镜像

version: "3"
services:
  php:
    # build: ./usr-bin
    image: usr-bin:latest   #刚刚的镜像名称
    volumes:
      - ./core:/go/src/app
    stdin_open: true    #重点
    tty: true           #这两个变量必须有,因为 等于 docker exec -it
    networks:
      - frontend
      - backend

volumes:
  mysql-data:

networks:
    frontend:
    backend:

然后运行

docker-compose up -d
docker ps 
docker exec -it xxx /bin/bash # xxx 指的是容器id

先这样吧,学习中。有什么心得在更新

你可能感兴趣的