错别字
修改理由:
此投稿已在 6年前 合并。
内容修改:
| Old | New | Differences |
|---|---|---|
| 1 | ||
| 2 | 1 |  |
| 3 | 2 | |
| 4 | 3 | 作为一个 PHP 工程师,你有时是否想过要精通一门其他编程语言? |
| 5 | 4 | |
| 6 | 5 | [PHP](http://php.net/) 曾是一个由许多企业构建大型全栈项目的的首选语言。此外, 在过去的五年中下列框架 ([Symfony](http://symfony.com/),[Laravel](https://laravel.com/), [Zend](http://framework.zend.com/)),工具 ([Composer](https://getcomposer.org/), [Monolog](https://github.com/Seldaek/monolog)) 和迅速成长的社区 ([PHP-FIG](http://www.php-fig.org/)) 帮助过诸多工程师去构建企业型应用。像 Facebook,Yahoo!,Wikipedia,Wordpress,Tumblr 之类的公司在创业之初都使用过原生 PHP 进行开发,这些随后都促使他们走向成功。 |
| 7 | 6 | |
| 8 | ||
| 7 | ||
| 9 | 8 | |
| 10 | 9 | 然而,一家成功公司的发展,需要更多的工程师来支持。因此公司庞大的组织架构最好把它拆分开来。在某些时刻,这种策略会让组织架构稳定,并且每个组都能专注于自己的独立业务。 |
| 11 | 10 | … | … |
| 16 | 15 | |
| 17 | 16 | 作为一名 PHP 工程师,你应该知道如果在一个庞大的项目中一个网络请求的初始化时间只需要 30 毫秒内,这样就很棒了。再加上 50-100 毫秒的时间交给业务去处理,这样应用的响应时间就会很可观。 |
| 18 | 17 | |
| 19 | ||
| 18 | ||
| 20 | 19 | |
| 21 | 20 | 直到我们打算打破我们原有的复杂项目,我们坚持为我们的服务提供相同的设置,那将会发生什么? 让我们简单的计算一下,如果服务在相同的请求期间互相交互 10 次,我们就需要 300ms 的请求时间。 这将会是多么糟糕的用户体验! |
| 22 | 21 | … | … |
| 29 | 28 | |
| 30 | 29 | > Go (通常称为golang) 是 Robert Griesemer,Rob Pike 和 Ken Thompson 于 2007 年在 Google 开发的一种开源编程语言。 主要为系统编程而设计,它是 C 和 C ++ 传统的静态类型编译语言,增加了垃圾收集,各种安全功能和 CSP 风格的并发编程功能。 |
| 31 | 30 | |
| 32 | ||
| 31 | ||
| 33 | 32 | Go 是由谷歌公司开发的一种编程语言,她 (Go语言) 不是一个有趣的 20% 的项目,也不是为了实现他人无法完成的事情,她是为了解决庞大团队编码的复杂性问题应运而生的,解决了他们使用大型的功能集的语言来编写大型软件的困惑。 |
| 34 | 33 | |
| 35 | 34 | 尽管她具有诸如容易并发和编译快速等优秀特性,但是她最主要的特性是特别的简单,便于开发。有相关的资料中显示,Go 的 [关键字](https://golang.org/ref/spec#Keywords) 仅仅有 25 个,而在在php中 [关键字]( http://php.net/manual/en/reserved.keywords.php) 有 67 个。 |
| 36 | 35 | |
| 37 | 36 | Go 语言的推出大致是在 PHP 语言支持命名空间的时间,也就是大约在 2009 年。在短短的 6 年时间里,已经有包括 [Docker](https://www.docker.com/), [Kubernetes](http://kubernetes.io/), [etcd](https://coreos.com/etcd/), [InfluxDB](https://influxdata.com/time-series-platform/influxdb/) 等数十个伟大的项目,不但如此,像 Google,,Dropbox, SoundCloud,Twitter,PayPal 等公司都用 Go 语言构建了他们的后端系统。 |
| 38 | 37 | |
| 39 | ||
| 38 | ||
| 40 | 39 | 返回微服务 |
| 41 | 40 | --------------------- |
| 42 | 41 | |
| 43 | 42 | 让我们回过头来看一下之前讨论过的问题,我们可以从使用 Go 语言获得哪些有益的收获。 |
| 44 | 43 | |
| 45 | Go 语言构建的应用可以很快的编译为机器码,许多编程人员感叹道,Go 语言编译的时间非常的快,当他们切换到浏览器 | |
| 44 | Go 语言构建的应用可以很快的编译为机器码,许多编程人员感叹道,Go 语言编译的时间非常的快,当他们切换到浏览器便点击「刷新」时,应用程序就已经重新编译了和重新启动了,并且发出了请求。即使是在构建非常大的代码库时,就像是使用一种像 PHP 这种解释型的语言的感觉。 | |
| 46 | 45 | |
| 47 | 46 | 在编写传统的 API 「Hello World」的时候,用十行代码,响应的时间不到 1 毫秒。Go 语言的多核功能可以让编程人员能够运行沉重的软件。生态系统允许选择任何的传输协议,例如 [JSON over HTTP](http://www.jsonrpc.org/historical/json-rpc-over-http.html), [gRPC](http://www.grpc.io/), [Protocol Buffers](https://developers.google.com/protocol-buffers/) 或者 [Thrift](https://thrift.apache.org/)。请求很容易在 [Zipkin](http://twitter.github.io/zipkin/) 找到。指标从 [statsd](https://github.com/etsy/statsd) 导出到 [Prometheus](https://prometheus.io/)。使用限速器强制进入或外出的请求吞吐量,并保护与断路器的客户服务通信。 |
| 48 | 47 | |
| 49 | ||
| 48 | ||
| 50 | 49 | 关于 Go |
| 51 | 50 | ------------- |
| 52 | 51 | … | … |
| 94 | 93 | first, last = getName() |
| 95 | 94 | ``` |
| 96 | 95 | |
| 97 | ||
| 96 | ||
| 98 | 97 | 在 Go 代码中,你不会看到如此常用的`foreach`, `while`和 `do-while` 。他们统一成一个单一的 `for` 声明: |
| 99 | 98 | |
| 100 | 99 | ``` | … | … |
| 151 | 150 | ``` |
| 152 | 151 | |
| 153 | 152 | 我渴望谈论其他许多功能,但是这会让我复制官方网站上的 [实效 GO 编程 ](https://golang.org/doc/effective_go.html) 文档,并生成一篇永无止境的文章。但我想花一点时间向您介绍 Go 中的并发,我发现它是该语言最有趣的主题之一。在我们加入之前,你需要知道在 Go 中关于并发的两件事- *goroutines* 和 *channels*。 |
| 154 | ||
| 153 | ||
| 155 | 154 | |
| 156 | 155 | goroutine 有一个简单的模型:它是一个和其他 goroutines 在同一地址空间同时执行的函数。当执行完之后,goroutine 会悄悄的退出。 最简单的一个例子就是写一个每秒在终端打印「I'm alive」的心跳函数。 |
| 157 | 156 | … | … |
| 193 | 192 | |
| 194 | 193 | 总结一下, 我们刚刚执行了同一个函数两次并且让程序并发的执行它们, 并要求它们在我们真真需要的时候给我们执行结果。 |
| 195 | 194 | |
| 196 | ||
| 195 | ||
| 197 | 196 | |
| 198 | 197 | ### 工具 |
| 199 | 198 | … | … |
| 201 | 200 | |
| 202 | 201 | 可以使用 `go doc` 去阅读源码包文档, 而 `go vet` 将会协助我们查找代码中的问题。 安装第三方包只需要执行 `go get [github.com/[vendor]/[package](http://github.com/[vendor]/[package)]` 指令, 测试只需要执行 `go test [package]` 指令。正如你所看到的,工程师在每一个程序每一个语言都用到的大多数工具都在这里开箱即用。 |
| 203 | 202 | |
| 204 | ||
| 203 | ||
| 205 | 204 | ### 项目部署 |
| 206 | 205 | |
| 207 | 206 | 无论你选择哪种语言或者你正在构建什么语言,部署项目都是强制性的操作。作为一个 PHP 工程师,在你的职业生涯中,你写过多少个 [Capistrano](http://capistranorb.com/) 或者 [Envoy](https://laravel.com/docs/master/envoy) 的配置文件?那一天你将多少手动更改的文件通过 FTP 传输到服务器上? | … | … |
| 226 | 225 | - 将当前版本符号链接指向新版本文件夹 |
| 227 | 226 | - 重启 PHP-FPM |
| 228 | 227 | |
| 229 | ||
| 228 | ||
| 230 | 229 | 当然,除此之外,你需要确保你的目标和构建服务器至少安装了PHP-FPM和PHP,它们之间的版本要相互匹配包括工程师用于本地开发的版本。 |
| 231 | 230 | |
| 232 | 231 | 现在让我介绍常规的 Go 应用程序的部署过程: | … | … |
| 240 | 239 | |
| 241 | 240 | 美妙之处在于你甚至不需要在目标服务器上安装 Go ,即使它们运行不同的操作系统或基于不同的 CPU 架构,你仍然可以从单个构建服务器或任何其他计算机为所有这些工具(甚至是Windows)准备工件。 |
| 242 | 241 | |
| 243 | ||
| 242 | ||
| 244 | 243 | 总结 |
| 245 | 244 | ---------- |
| 246 | 245 | … | … |
| 250 | 249 | |
| 251 | 250 | 另一方面,易于编写和理解的Go语言是用来构建微服务的不错选择, 它的学习曲线并没有 [Java](https://www.java.com/en/) / [Scala](http://www.scala-lang.org/) 那么陡峭,同时其性能与 [C](https://en.wikipedia.org/wiki/C_(programming_language)) 相接近。 高效的编译系统,高并发的支持使得使用Go来编写强大的应用程序成为可能。 |
| 252 | 251 | |
| 253 | ||
| 252 | ||
| 254 | 253 | 其它资源 |
| 255 | 254 | -------------------- |
| 256 | 255 |
关于 LearnKu