❶ GO語言商業案例(十六):Curve-
Golang 的創建是為了實現最大的用戶效率和編碼效率。已經熟悉 Java 或 PHP 的程序員可以在幾周內接受 Go 的培訓(許多人最終會更喜歡它)。在本文中,Dewet Diener 探討了 Golang 的優缺點,以及它的測試驅動開發 (TDD) 如何完美契合。
Golang 由 Google 開發和設計,於 2009 年作為一種綜合性編程語言首次出現,旨在最大限度地提高編碼效率。創建該語言的目的是修正其他已建立語言的缺陷。盡管 Golang(或簡稱為「Go」)是一門年輕的語言,但已經積累了大量的開發人員,因此我們想分享為什麼在 Curve 我們喜歡 Golang,以及我們如何採用它來實現我們移動銀行業務的目標到雲端。
Go 是一種精緻的編程語言:它支持「所見即所得」的原則,這意味著清晰易讀的代碼和更少的復雜抽象。該語言本身易於使用且易於訓練。盡管如此,作為一個相對較新的生態系統,要找到對 Go 具有廣泛預先知識的工程師可能會很棘手。
然而,與其他編程語言不同,Go 的創建是為了最大限度地提高用戶效率。因此,具有 Java 或 PHP 背景的開發人員和工程師可以在幾周內獲得使用 Go 的技能和培訓——根據我們的經驗,他們中的許多人最終更喜歡它。
在 Curve,我們大力提倡測試驅動開發 (TDD),Go 的框架與這種方法保持一致。通過簡單地命名一個文件 foo_test.go 並在該文件中添加結構化測試函數,Go 將快速有效地運行您的單元測試。這一創新功能提高了生產力,因為它可以更加專注於測試驅動的開發和改進的同行評審機會。
Golang 具有出色的生產優化品質,例如內存佔用小,這支持其在大型項目中作為構建塊的能力,以及開箱即用的與其他架構的輕松交叉編譯。由於 Go 代碼被編譯為單個靜態二進制文件,因此它可以輕松進行容器化,並且通過擴展,將 Go 部署到任何高可用性環境(例如 Kubernetes)中幾乎是微不足道的。
它提供了一種機制來保護工作負載,通過擁有非常纖薄的生產容器而沒有任何無關的依賴項。這使得構建、部署和維護基於 Go 的資產更加直接和安全,並為希望建立或發展其微服務戰略的公司提供了可靠的選擇。
Go 是專門為滿足我們快速發展的技術生態系統的需求而創建的。例如,Go 可以滿足您構建 API 所需的一切,並將其作為其標准庫的一部分。它使用簡單,高性能的 http 伺服器消除了團隊設計新項目時經常發生的一些常見的 探索 和設計癱瘓問題——這對於一些其他流行語言(如 Java 和 Node.js)來說太常見了。
Golang 還通過其內置於語言本身的自動格式化程序巧妙地解決了代碼格式化分歧。這完全消除了格式爭議,進而提高了團隊的生產力和注意力。
盡管我是 Go 的擁護者,但它顯然也不是沒有缺陷。一個爭論不休的特性是 Go 沒有顯式介面,這是許多開發人員習慣的概念。雖然不是有害的,但它可以使選擇最適合您的結構的介面成為一項任務。這是因為您不會像在其他流行的編程語言中那樣編寫 X 實現 Y,但您很快就會接受。
依賴管理也是另一個不屬於 Google Golang 開發團隊原始設計的功能。開源社區介入並創建了 Glide 和 Dep,最初的努力並沒有完全解決問題。從 Go 1.11 開始,添加了對模塊的支持,這似乎已成為官方的依賴管理工具。這些挑戰並沒有削弱 Go 作為一種高效編程語言的獨創性,並且它繼續為我們提供優於其他編程語言的顯著優勢。
Golang 吸引了全球敏銳的開發人員的注意,並且圍繞它的興奮繼續增長。開源社區因有趣的項目而蓬勃發展;最著名的是 Docker 和 Kubernetes。
正是這種新鮮、有創意但又簡單的包裝吸引了我們去Go:它是一種令人興奮的編碼語言,可以幫助我們在 Curve 中快速開發以構建更好的產品。
❷ Golang database/sql源碼分析
Gorm是Go語言開發用的比較多的一個ORM。它的功能比較全:
但是這篇文章中並不會直接看Gorm的源碼,我們會先從database/sql分析。原因是Gorm也是基於這個包來封裝的一些功能。所以只有先了解了database/sql包才能更加好的理解Gorm源碼。
database/sql 其實也是一個對於mysql驅動的上層封裝。」github.com/go-sql-driver/mysql」就是一個對於mysql的驅動,database/sql 就是在這個基礎上做的基本封裝包含連接池的使用
下面這個是最基本的增刪改查操作
操作分下面幾個步驟:
因為Gorm的連接池就是使用database/sql包中的連接池,所以這里我們需要學習一下包里的連接池的源碼實現。其實所有連接池最重要的就是連接池對象、獲取函數、釋放函數下面來看一下database/sql中的連接池。
DB對象
獲取方法
釋放連接方法
連接池的實現有很多方法,在database/sql包中使用的是chan阻塞 使用map記錄等待列表,等到有連接釋放的時候再把連接傳入等待列表中的chan 不在阻塞返回連接。
之前我們看到的Redigo是使用一個chan 來阻塞,然後釋放的時候放入空閑列表,在往這一個chan中傳入struct{}{},讓程序繼續 獲取的時候再從空閑列表中獲取。並且使用的是鏈表的結構來存儲空閑列表。
database/sql 是對於mysql驅動的封裝,然而Gorm則是對於database/sql的再次封裝。讓我們可以更加簡單的實現對於mysql資料庫的操作。
❸ Go語言的開源項目
1.Docker項目
網址為 https://github.com/docker/docker 。
介紹:Docker是一種操作系統層面的虛擬化技術,可以在操作系統和應用程序之間進行隔離,也可以稱之為容器。Docker可以在一台物理伺服器上快速運行一個或多個實例。例如,啟動一個Cent OS操作系統,並在其內部命令行執行指令後結束,整個過程就像自己在操作系統一樣高效。
2.golang項目
網址為 https://github.com/golang/go 。
介紹:Go語言的早期源碼使用C語言和匯編語言寫成。從Go 1.5版本自舉後,完全使用Go語言自身進行編寫。Go語言的源碼對了解Go語言的底層調度有極大的參考意義,建議希望對Go語言有深入了解的讀者讀一讀。
3.Kubernetes項目
網址為 https://github.com/kubernetes/kubernetes 。
介紹:Google公司開發的構建於Docker之上的容器調度服務,用戶可以通過Kubernetes集群進行雲端容器集群管理。
4.etcd項目
網址為 https://github.com/coreos/etcd 。
介紹:一款分布式、可靠的KV存儲系統,可以快速進行雲配置。
5.beego項目
網址為 https://github.com/astaxie/beego 。
介紹:beego是一個類似python的Tornado框架,採用了RESTFul的設計思路,使用Go語言編寫的一個極輕量級、高可伸縮性和高性能的Web應用框架。
6.martini項目
網址為 https://github.com/go-martini/martini 。
介紹:一款快速構建模塊化的Web應用的Web框架。
7.codis項目
網址為 https://github.com/Codis Labs/codis。
介紹:國產的優秀分布式Redis解決方案。
8.delve項目
網址為 https://github.com/derekparker/delve 。
介紹:Go語言強大的調試器,被很多集成環境和編輯器整合。
❹ Golang入門到項目實戰 | go語言常量
常量,就是在程序編譯階段就確定下來的值,而程序在運行時則無法改變該值。在Go程序中,常量可以是數值類型(包括整型、浮點型和復數類型)、布爾類型、字元串類型等。
定義一個常量使用const關鍵字,語法格式如下:
const:定義常量關鍵字
constantName:常量名稱
type:常量類型
value:常量的值
實例
運行結果
iota比較特殊,可以被認為是一個可被編譯器修改的常量,它默認開始值是0,每調用一次加1。遇到const關鍵字時被重置為0。
實例
運行結果
使用_跳過某些值
運行結果
運行結果
❺ GoLang -- Gin框架
• 何為框架:
框架一直是敏捷開發中的利器,能讓開發者很快的上手並做出應用,甚至有的時候,脫離了框架,一些開發者都不會寫程序了。成長總不會一蹴而就,從寫出程序獲取成就感,再到精通框架,快速構造應用,當這些方面都得心應手的時候,可以嘗試改造一些框架,或是自己創造一個。
Gin是一個golang的微框架,封裝比較優雅,API友好,源碼注釋比較明確,已經發布了1.0版本。具有快速靈活,容錯方便等特點。其實對於golang而言,web框架的依賴要遠比Python,Java之類的要小。自身的net/http足夠簡單,性能也非常不錯。框架更像是一些常用函數或者工具的集合。藉助框架開發,不僅可以省去很多常用的封裝帶來的時間,也有助於團隊的編碼風格和形成規范。
(1)首先需要安裝,安裝比較簡單,使用go get即可
go get github.com/gin-gonic/gin
如果安裝失敗,直接去Github clone下來,放置到對應的目錄即可。
(2)代碼中使用:
下面是一個使用Gin的簡單例子:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
router.Run(":8080") // listen and serve on 0.0.0.0:8080
}
簡單幾行代碼,就能實現一個web服務。使用gin的Default方法創建一個路由handler。然後通過HTTP方法綁定路由規則和路由函數。不同於net/http庫的路由函數,gin進行了封裝,把request和response都封裝到gin.Context的上下文環境。最後是啟動路由的Run方法監聽埠。麻雀雖小,五臟俱全。當然,除了GET方法,gin也支持POST,PUT,DELETE,OPTION等常用的restful方法。
Gin可以很方便的支持各種HTTP請求方法以及返回各種類型的數據,詳情可以前往https://github.com/gin-gonic/gin查看。
2.1 匹配參數
我們可以使用Gin框架快速的匹配參數,如下代碼所示:
冒號:加上一個參數名組成路由參數。可以使用c.Param的方法讀取其值。當然這個值是字串string。諸如/user/rsj217,和/user/hello都可以匹配,而/user/和/user/rsj217/不會被匹配。
瀏覽器輸入以下測試:
返回結果為:
其中c.String是gin.Context下提供的方法,用來返回字元串。
其中c.Json是gin.Context下提供的方法,用來返回Json。
下面我們使用以下gin提供的Group函數,方便的為不同的API進行分類。
我們創建了一個gin的默認路由,並為其分配了一個組 v1,監聽hello請求並將其路由到視圖函數HelloPage,最後綁定到 0.0.0.0:8000
C.JSON是Gin實現的返回json數據的內置方法,包含了2個參數,狀態碼和返回的內容。http.StatusOK代表返回狀態碼為200,正文為{"message": 「welcome"}。
註:Gin還包含更多的返回方法如c.String, c.HTML, c.XML等,請自行了解。可以方便的返回HTML數據
我們在之前的組v1路由下新定義一個路由:
下面我們訪問
可以看到,通過c.Param(「key」)方法,Gin成功捕獲了url請求路徑中的參數。同理,gin也可以捕獲常規參數,如下代碼所示:
在瀏覽器輸入以下代碼:
通過c.Query(「key」)可以成功接收到url參數,c.DefaultQuery在參數不存在的情況下,會由其默認值代替。
我們還可以為Gin定義一些默認路由:
這時候,我們訪問一個不存在的頁面:
返回如下所示:
下面我們測試在Gin裡面使用Post
在測試端輸入:
附帶發送的數據,測試即可。記住需要使用POST方法.
繼續修改,將PostHandler的函數修改如下
測試工具輸入:
發送的內容輸入:
返回結果如下:
備註:此處需要指定Content-Type為application/x-www-form-urlencoded,否則識別不出來。
一定要選擇對應的PUT或者DELETE方法。
Gin框架快速的創建路由
能夠方便的創建分組
支持url正則表達式
支持參數查找(c.Param c.Query c.PostForm)
請求方法精準匹配
支持404處理
快速的返回給客戶端數據,常用的c.String c.JSON c.Data
❻ Github上收集了70個微信小程序源碼
1:仿豆瓣電影微信小程序
https://github.com/zce/weapp-demo
2:微信小程序移動端商城
https://github.com/liuxuanqiang/wechat-weapp-mall
3:Gank微信小程序
https://github.com/lypeer/wechat-weapp-gank
4:微信小程序高仿QQ應用
https://github.com/xiehui999/SmallAppForQQ
5:微信中的知乎
https://github.com/RebeccaHanjw/weapp-wechat-hu
6:實現一個移動端小商城
https://github.com/skyvow/m-mall
7:微信小程序demo
https://github.com/web-Marker/wechat-Development
8: 跑步微信小程序Demo
https://github.com/alanwangmodify/weChatApp-Run
9:簡單的v2ex微信小程序
https://github.com/jectychen/wechat-v2ex
10:騰訊雲微信小程序
https://github.com/tencentyun/weapp-client-demo
11:微信小程序-微票
https://github.com/wangmingjob/weapp-weipiao
12:微信小程序demo 仿手機淘寶
https://github.com/ChangQing666/wechat-weapp-taobao
13:一個為微信小程序開發准備的基礎骨架
https://github.com/zce/weapp-boilerplate
14:巴爺微信商城的簡單版本
https://github.com/bayetech/wechat_mall_applet
15:微信小程序 - 電影推薦
https://github.com/yesifeng/wechat-weapp-movie
16:微信小程序-知乎日報
https://github.com/myronliu347/wechat-app-hudaily
17:微信小程序: 音樂播放器
https://github.com/eyasliu/wechat-app-music
18:使用微信小程序實現分答這款APP的基礎功能
https://github.com/davedavehong/fenda-mock
19:微信小程序開發demo-地圖定位
https://github.com/giscafer/wechat-weapp-mapdemo
:20:微信小程序 - 豆瓣電影
https://github.com/hingsir/weapp-douban-film
21:wepy仿微信聊天界面
https://github.com/wepyjs/wepy-wechat-demo
22:仿 「ONE · 一個」 的微信小程序
https://github.com/ahonn/weapp-one
23:微信小程序集成Rex實現的Todo list
https://github.com/charleyw/wechat-weapp-rex-todos
24: 基於Zhihu Live數據的微信小程序
https://github.com/dongweiming/weapp-hulive
25:微信小程序之小熊の日記
https://github.com/harveyqing/BearDiary
26:仿網易雲音樂APP的微信小程序
https://github.com/sqaiyan/netmusic-app
27:微信小程序的Flex布局demo
https://github.com/icindy/wxflex
28:番茄時鍾微信小程序版
https://github.com/kraaas/timer
29:Wafer 服務端 Demo
https://github.com/tencentyun/weapp-node-server-demo
30:微信小程序版聊天室
https://github.com/ericzyh/wechat-chat
31:微信小程序版簡易計算器,適合入門練手
https://github.com/nizb/wxapp-sCalc
32:微信小程序示例一筆到底
https://github.com/CFETeam/weapp-demo-session
33:基於麵包旅行 API 製作的微信小程序示例
https://github.com/romoo/weapp-demo-breadtrip
34:新聞閱讀器
https://github.com/vace/wechatapp-news-reader
35:一個簡單的微信小程序購物車DEMO
https://github.com/SeptemberMaples/wechat-weapp-demo
36:微信小程序-公眾號熱門文章信息流
https://github.com/hijiangtao/weapp-newsapp
37:通過Node.js實現的妹子照片爬蟲微信小程序
https://github.com/litt1e-p/weapp-girls
38:從FlexLayout布局開始學習微信小程序
https://github.com/hardog/wechat-app-flexlayout
39:HiApp 微信小程序版
https://github.com/BelinChung/wxapp-hiapp
40:微信小程序的簡單嘗試
https://github.com/zhengxiaowai/weapp-github
41:集美大學圖書館的便捷工具
https://github.com/ToadWoo/bookbox-wxapp
42:微信小程序版妹紙圖
https://github.com/brucevanfdm/WeChatMeiZhi
43:V2ex 微信小程序版
https://github.com/bestony/weapp-V2ex
44:微信小程序仿百思不得姐
https://github.com/SureZhangHW/WXBaiSi
45:微信小程序音樂播放器應用
https://github.com/xingbofeng/wx-audio
46:醫葯網原生APP的微信小程序DEMO
https://github.com/jiabinxu/yiyaowang-wx
47:微信小程序跟讀
https://github.com/gxmzjxk/wxreading
48:微信小程序瀑布流布局模式
https://github.com/icindy/WxMasonry
49:微信小程序HotApp雲筆記
https://github.com/hotapp888/hotapp-notepad
50:小程序模仿——網易雲音樂
https://github.com/MengZhaoFly/wechatApp-netease_cloudmusic
51:微信小程序商城demo
https://github.com/lin-xin/wxapp-mall
52:微信小程序版的掃雷
https://github.com/jsongo/wx-mime
53:專注管理時間的微信小程序
https://github.com/SeaHub/PigRaising
54:微信小程序版干貨集中營
https://github.com/iwgang/GankCamp-WechatAPP
55:英雄聯盟(LOL)戰績查詢
https://github.com/xiaowenxia/weapp-lolgame
56:微信小程序首字母排序選擇表
https://github.com/icindy/wxSortPickerView
57:微信小程序版豆瓣電影
https://github.com/David-Guo/weapp-douban-movie
58:簡單的實現了1024的游戲規則
https://github.com/RedLove/WexinApp_1024
59:微信小程序試玩
https://github.com/uniquexiao/wechat-app-githubfeed
60:微信小程序逗樂
https://github.com/mkxiansheng/doule
61:一步步開發微信小程序
https://github.com/Gavin-YYC/wxApp
62:一個 meteor 的 React todo list 例子
https://github.com/leijing7/wx-mina-meteor
63:微信小程序健康菜譜
https://github.com/bestTao/caipu_weixin
64: jspapa微信小程序版本
https://github.com/biggerV/jspapa-wx
65:微信小程序版的CNodeJs中文社區
https://github.com/Shaman05/CNodeJs-WXAPP
66:LeanCloud 的微信小程序用戶登陸Demo
https://github.com/bestony/weapp-LeanCloud
67: 微笑話微信小程序
https://github.com/zszdevelop/wejoke
68:微信小程序開發的App
https://github.com/chongbenben/liwushuoapp
69:體育新聞微信小程序
https://github.com/havenxie/weapp-sportsnews
70:基於Labrador和mobx構建的小程序開發demo
https://github.com/spacedragon/labrador_mobx_example
❼ golang 多人開發怎麼保證源碼安全
隨著PHP有著越來越深入的了解,以及遇到越來越多的不同業務時,使用PHP總會讓我有一種莫名的無力感。當然,並不是我一個人在使用PHP的時候遇到了問題。事實上,每個略微有一些經驗,接觸過一些需求的人都會有同樣的困惑。各種配合LAMP(或者LNMP?)架構的後端技術也因此被發明或被發現,進而整合到PHP的開發的技術體系中。從簡單的Memcached作為數據中轉,cron後端定時處理;到Gearman、RabbitMQ這些隊列神器;最近Laruence甚至封裝了利用libcurl的非同步特性實現並發RPC調用的yar擴展。幾乎整個社區都在尋找PHP的摩西之路。好吧,說了一大堆,回歸主題。之前我寫了一篇英文練筆《》,獲得不少國際友人的關注。排除拼寫和語法被他們詬病外,主要是有許多朋友覺得我沒把事情說清楚。所以這里我用母語重新聊聊這個事情,只是這些國際友人什麼時候能學會閱讀中文呢?;)Go或者Golang,是由Google支持的快速、一致、穩定的,有活躍的社區支持的開源編程語言。越來越多的應用選擇使用Golang進行構建。雖然RobPike說「…我們希望C++程序員來了解Go並作為一個可選的語言…」,不過我真得認為:PHPer應當學習Golang!接下來我們就來談談原因。容易學習PHP相當容易學習。Golang也是!在這點上,一群大老外對我的觀點進行了猛烈的抨擊。他們認為我羞辱了PHPer,說得好像只有簡單的東西PHPer才能學會一樣。但是,這難道不是事實嗎?或者換個說法:像我一樣的喜歡PHP的人,或多或少都會更喜歡簡單的東西。PHP的語法接近C族編程語言(C/C++/Java等等)。如果有這些語言的經驗,在第一次遇到PHP的時候立刻就能開始上手編寫代碼。在我看來,編寫PHP代碼或許更加考驗程序員的記憶力,而不是智力(當你面對各種不同風格的函數定義、各種擴展的特殊約定時,你一定會相當認同我的觀點)。Golang同樣是一個C族編程語言。呃,或者有一些不同吧。例如關鍵字「for」,功能上和PHP的接近,但是沒有括弧。條件語句「if」同樣無需括弧。可以閱讀EffectiveGo了解內容。Golang只有3025個關鍵字和47個操作符號、分隔符號或其他特殊標記。記住這些標記確實不需要什麼特別的努力。精巧的類型系統相當容易使用。實用的,具有方法的結構體類型代替了笨重的對象系統。介面的設計是Golang中我最喜歡的部分。當完成了《Go指南》的學習之後,利用PHP積累的經驗,立刻就可以開始使用Golang處理一些簡單的任務。容易使用PHP腳本是由SAPI組件進行解析執行的,如Web伺服器模塊、PHP-FPM或者CLI。部署PHP所需要的全部東西就是一個SAPI環境。配置這個環境對於新手來說可能是學習PHP過程中最為困難的部分。所有的Golang代碼會編譯和鏈接為本地碼。所以除了編譯環境,執行時無需再為其進行任何特別的部署。對比PHP環境的配置,這要簡單很多。你真得認為配置PHP環境很復雜嗎?我不覺得,真的!而配置Golang編譯環境比那還要簡單點。我確信已經有大量的Golang相關的書籍、文章介紹過如何進行編譯環境的配置了。為了更加清晰,我這里梳理一下思路。有三個步驟需要處理:下載Golang的源代碼;根據《[翻譯]Go環境設置》的提示設置環境變數;運行源代碼src目錄中的all.bash。或者一步到位:使用二進制包進行安裝。然後就會得到一個叫做「go」的工具集合。使用「go」工具和使用PHP的CLI工具一樣簡單。《[翻譯]go工具》對此進行了詳細的解釋。PHP的迷思如果一個編程語言容易學習和使用,我們是不是就應當學習它呢?有許多容易學習和使用的編程語言。難道要把它們都學一遍?答案是顯然的:NO!但是呢?只是因為它很酷!是的,我在開玩笑,但是這是真的。無論如何先從PHP自身談起吧。PHP「原本是為了開發動態的Web頁面而設計的伺服器端通用語言(Wikipedia)」。PHP一個重要的特性就是可以嵌入到HMTL中。代碼編寫在「」標簽內;HTML寫在標簽外。它有一個強大的擴展系統。擴展使用C調用ZendAPI編寫。數據的處理實際上要利用這些擴展完成。在我看來,PHP是世界上最好的模板語言。但是當積累了一些PHP的經驗,並且開始面對一些更加復雜的Web應用時,你一定會對PHP產生一種無力的感覺。它沒有內建的並行機制,沒有線程、進程(你真得認為那個簡陋的進程式控制制可以不加改造的用在高並發的生產環境?),或者其他某「程」。一個慢數據源可以阻塞整個頁面的處理。消息隊列、緩存、代理……系統開始不僅僅是PHP這么單純,還包括了許多服務和系統組件。這時,PHP只處理很少的業務邏輯,成為真正的模板語言了。PHPer們總是在尋找解決這一問題的法,如「PHPmultithread」或者PHPRPC並發框架。我很難說哪種會更好一些。不過我肯定你會需要選擇一些編程語言用於後端工作的開發。就我自己的經驗,我嘗試過C(一直在和malloc/free進行搏鬥)/Java(陷入到了jar地獄中)/Python(從來沒能做到Pythonic不說,還總是在錯誤的類型中打轉)……如果想要獲得性能,就得同內存管理進行搏鬥;如果用GC,就得部署和調優VM;當獲得便利性的時候,同時也是走在刀尖上,一個小錯誤就引起巨大的災難……每個都有優勢,同樣每個都有問題。好吧!現在回到Golang!Golang有GC,無需關心內存管理(或者可以用較少的精力去關注它)。代碼被編譯為本地碼,因此「cp」和「mv」就是部署Golang編寫的應用所需要的全部工具。噢,我剛才已經說過了,Golang是一個具有靜態類型系統的編譯語言。所以你沒有機會弄亂變數的類型。當然,PHPer應該學習Golang的一個重要原因是「轉到Go是因為他們並未放棄太多的表達能力,但是獲得了性能,並且與並發共舞(RobPike)」。《WhyNotGo?(英文)》對此進行了深入的分析。我可以分享一些我的經驗:有一個Gearman的worker用於處理後端數據。PHP通過其API連接到Gearman的JobServer向worker發起請求。最初worker是使用python編寫的(還有更加原始的版本,PHP的,但是你能想像它工作起來……唉,不說了……)。這個版本有許多的問題(是我們自己的問題,不關Python的事),但是至少它能工作。後來用Golang重寫了這個worker。為此我開發了Golang的GearmanAPI,並使用ZendAPI編寫了一個在Golang中執行PHP腳本的包。然後將它們放在一起:一個可以執行PHP的Gearmanworker。它已經工作了一段時間了,看起來還不錯!哦,受到Yar的啟發,這里還有一個Golang編寫的RPC合並器,用來合並PHP腳本中的RPC調用。現在還是個玩具,不過或許日後能用得著。這其實是將Golang的channel當作消息隊列來用。我在《Golang:有趣的channel應用》中對此有一些說明。世界真美好啊。謝謝Golang!無論如何,大多數PHPer在進行後端開發的時候都會需要學習一些其他語言。如果你正在尋找,或者已經嘗試了一些其他語言。為什麼不來試試Golang?它真得可以讓你的生活更加輕松和快樂。讓你可以有的時間陪伴你的家人和朋友,吃你愛吃的東西,去你想去的地方。貌似我還是沒說清楚啊?好吧,沒關系,在下個月的中國軟體開發者大會上再跟大家就這個話題做一個探討吧。