SlideShare una empresa de Scribd logo
1 de 57
Descargar para leer sin conexión
Why use Go for Web
development?
Weng Wei, July 2014
About Go
–Rob Pike
“Go is a programming language designed by Google to help solve
Google's (big)problems. ”
–Derek Collison
“ Go will become the dominant language for systems work in IaaS,
Orchestration, and PaaS in 24 months.”
Go looks cool!
but, it is suitable for simple web development?
Web? Use MVC!
• Quite a number of Go MVC web framework exist:
• Beego / Martini / Revel….
• Different approach for MC layers
• V layer are mostly the same: Go HTML Template http://golang.org/
pkg/html/template/
@yinwang0:Go HTML Template
• “Basically usable” template engine
• Surprisingly, logic control code in template are not Go itself
• Poor expressiveness
• Need to bind all template data into a single model
• Helper func need to be “registerd”
• Quite messy & tedious
–Wang Yin
“It’s better to build website with more mature frameworks from
other language”
Template engine must be good
for web development!
– Wikipedia
“PHP(PHP: Hypertext Preprocessor)…server-side scripting
language designed for web development.. PHP code can be
simply mixed with HTML code..”
Mix html with Go?
• “Not possible, Go doesn’t have interpreter”
• “Go is NOT script”
I think otherwise
• Go is turing complete
• No things Go can’t go
• Only thing more complicated to do with Go
• Embedding static compile language in HTML are possible:
• ASP.Net
Razor
• Default template/view engine for ASP.NET MVC
• Support embedding c# / vb.net in HTML
• .Net developers love it (including me):
• http://www.zhihu.com/question/19973649 (Chinese link)
How complicated to create
GoRazor?
GoRazor
• http://github.com/sipin/gorazor
• PoC in one night
• Continuous team improvement:214 commits
• Proven with internal large web project
• Mature template engine; sublime plug-ins for syntax highlight + auto
complete
• Able use Go directly in template; no different syntax for flow control
• Powerful expressiveness
• Rendering template is calling function; models are function
parameters
• No need to register helper func, directly import in template
• Very concise & convinient
Demo
• If you think Go is not suitable for web development because of poor
template engine
• Please try https://github.com/sipin/gorazor
Of cause, template engine is
only the start
Is Go suitable for dynamic web
development?
Dynamic
• web is built around string
• Go is static compiled; can it:
• Obtain object properties via string?
• Invoke package/object methods via string?
• Create object via string?
Reflection
• Reflection could meet most of the requirements
• Check Martini
Issues with Go’s reflection
• Let’s put performance aside
• Tedious & complicated
• Move compilation error to runtime error: no complier check
Reflection is not the only way
Code generation approach
For example
• Bind HTTP Post form values to object
• Generate all these methods:
• NewXXXObjByID(namespace, classname, id string)
• ReadForm(params map[string]string)

• So, 600k LoC





• Code generation makes static compiled language feels “dynamic”
• Go can do this, so does all other languages
• But, how about the compilation speed?
Full Compliation
Incremental compilation after editing template
• Go’s compilation speed is amazing!
• This is a project with 600k LoC on Mid 2011 Macbook Air
• We could keep cmd + s / cmd + tab / cmd + R development pace
Back to dynamic
• If complication is slow, then code-gen approach hurts produtivity
• Go compile extreme fast
• Go has unique point for dynamic
– Rob Pike
“interfaces.. the true Go philosophy…”
Go’s interface
• Define class/method first
• May define interface later
• Interface query at run-time
Example
• Check if object has “GetUserID” method
• If so, check if current user
• If so, allow edit
More example
• Check if object has “IsDistributed”、“GetPersistentNode” methods
• If so, replicate object to other nodes
Combine the examples
• Go allow querying original object’s interface
• Switch between different interfaces at runtime
• Interface could be defined in new packages
• No need to put all interface combinations for different purpose at
one place
However, why reinventing the
web MVC wheel?
But!
• Simple web pages? Pick whatever you like
• Of cause including Go
• Middle size web application, like a forum?
• php / Rails / Django / asp.net are more mature
• Go also can, if you like re-inventing the wheel
• How about large website?
Needs for large website
• Stability rules
• Scalability & Distributed are important
• SOA architecture
• Performance are critical
• Maintainable code (With GoRazor; even the templates are strong-
typed & compiler checked)
• Quick prototyping, and switch technology/platform?
• Works, but these are technical debt!
• If we could owe less debt since the beginning, why not?
Go is suitable to development
large website!
Finally, I would like to talk about
Go & startup
Q & A
Reference
• https://talks.golang.org/2012/splash.slide
• http://open.qiniudn.com/go-next-c-pptx.pdf
• http://www.csdn.net/article/2012-09-14/2809984-will-go-be-the-new-go-to-
programming-lan
• http://weibo.com/1889019865/B4nx3z6GF
• http://www.yinwang.org/blog-cn/2014/04/18/golang/
• http://zh.wikipedia.org/wiki/PHP
• http://www.ituring.com.cn/article/1339

Más contenido relacionado

La actualidad más candente

Automating JavaScript testing with Jasmine and Perl
Automating JavaScript testing with Jasmine and PerlAutomating JavaScript testing with Jasmine and Perl
Automating JavaScript testing with Jasmine and Perl
nohuhu
 
Developing Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScriptDeveloping Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScript
nohuhu
 
Proxying DBI with DBD::Gofer and App::Staticperl
Proxying DBI with DBD::Gofer and App::StaticperlProxying DBI with DBD::Gofer and App::Staticperl
Proxying DBI with DBD::Gofer and App::Staticperl
nohuhu
 
Less\sass done right in .NET
Less\sass done right in .NETLess\sass done right in .NET
Less\sass done right in .NET
PawelPabich
 

La actualidad más candente (20)

Saving Time By Testing With Jest
Saving Time By Testing With JestSaving Time By Testing With Jest
Saving Time By Testing With Jest
 
Automating JavaScript testing with Jasmine and Perl
Automating JavaScript testing with Jasmine and PerlAutomating JavaScript testing with Jasmine and Perl
Automating JavaScript testing with Jasmine and Perl
 
Next generation frontend tooling
Next generation frontend toolingNext generation frontend tooling
Next generation frontend tooling
 
ITT Flisol 2013
ITT Flisol 2013ITT Flisol 2013
ITT Flisol 2013
 
Untangling - fall2017 - week5
Untangling - fall2017 - week5Untangling - fall2017 - week5
Untangling - fall2017 - week5
 
Untangling - fall2017 - week6
Untangling - fall2017 - week6Untangling - fall2017 - week6
Untangling - fall2017 - week6
 
Developing Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScriptDeveloping Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScript
 
Proxying DBI with DBD::Gofer and App::Staticperl
Proxying DBI with DBD::Gofer and App::StaticperlProxying DBI with DBD::Gofer and App::Staticperl
Proxying DBI with DBD::Gofer and App::Staticperl
 
Less\sass done right in .NET
Less\sass done right in .NETLess\sass done right in .NET
Less\sass done right in .NET
 
JavaScript Build System Battle Royale | PrDC 2017
JavaScript Build System Battle Royale | PrDC 2017JavaScript Build System Battle Royale | PrDC 2017
JavaScript Build System Battle Royale | PrDC 2017
 
JSFoo-2017 Takeaways
JSFoo-2017 TakeawaysJSFoo-2017 Takeaways
JSFoo-2017 Takeaways
 
Functional Programming in PHP
Functional Programming in PHPFunctional Programming in PHP
Functional Programming in PHP
 
Riak at Posterous
Riak at PosterousRiak at Posterous
Riak at Posterous
 
Modern javascript
Modern javascriptModern javascript
Modern javascript
 
javerosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonjaverosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparison
 
The Dark Side of Single Page Applications
The Dark Side of Single Page ApplicationsThe Dark Side of Single Page Applications
The Dark Side of Single Page Applications
 
Journey To The Front End World - Part3 - The Machine
Journey To The Front End World - Part3 - The MachineJourney To The Front End World - Part3 - The Machine
Journey To The Front End World - Part3 - The Machine
 
Conquering AngularJS Limitations
Conquering AngularJS LimitationsConquering AngularJS Limitations
Conquering AngularJS Limitations
 
SGCE 2015 REST APIs
SGCE 2015 REST APIsSGCE 2015 REST APIs
SGCE 2015 REST APIs
 
ASP.NET Core - Phillosophies, Processes and Tooling
ASP.NET Core - Phillosophies, Processes and ToolingASP.NET Core - Phillosophies, Processes and Tooling
ASP.NET Core - Phillosophies, Processes and Tooling
 

Similar a Why use Go for web development?

Progressive Enhancement using WSGI
Progressive Enhancement using WSGIProgressive Enhancement using WSGI
Progressive Enhancement using WSGI
Matthew Wilkes
 
Getting started with dev tools (atl)
Getting started with dev tools (atl)Getting started with dev tools (atl)
Getting started with dev tools (atl)
Thinkful
 
Continuous Integration In A PHP World
Continuous Integration In A PHP WorldContinuous Integration In A PHP World
Continuous Integration In A PHP World
Idaf_1er
 

Similar a Why use Go for web development? (20)

Progressive Enhancement using WSGI
Progressive Enhancement using WSGIProgressive Enhancement using WSGI
Progressive Enhancement using WSGI
 
Test Automation with Twist and Sahi
Test Automation with Twist and SahiTest Automation with Twist and Sahi
Test Automation with Twist and Sahi
 
Automated Acceptance Testing from Scratch
Automated Acceptance Testing from ScratchAutomated Acceptance Testing from Scratch
Automated Acceptance Testing from Scratch
 
Prototyping like it is 2022
Prototyping like it is 2022 Prototyping like it is 2022
Prototyping like it is 2022
 
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
 
Managing Changes to the Database Across the Project Life Cycle (presented by ...
Managing Changes to the Database Across the Project Life Cycle (presented by ...Managing Changes to the Database Across the Project Life Cycle (presented by ...
Managing Changes to the Database Across the Project Life Cycle (presented by ...
 
Managing changes to eZPublish Database
Managing changes to eZPublish DatabaseManaging changes to eZPublish Database
Managing changes to eZPublish Database
 
WTF: Where To Focus when you take over a Drupal project
WTF: Where To Focus when you take over a Drupal projectWTF: Where To Focus when you take over a Drupal project
WTF: Where To Focus when you take over a Drupal project
 
Developing Complex WordPress Sites without Fear of Failure (with MVC)
Developing Complex WordPress Sites without Fear of Failure (with MVC)Developing Complex WordPress Sites without Fear of Failure (with MVC)
Developing Complex WordPress Sites without Fear of Failure (with MVC)
 
Devconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedDevconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developed
 
WebDev Crash Course
WebDev Crash CourseWebDev Crash Course
WebDev Crash Course
 
How Not to Be Conned by Your Drupal Vendor!
How Not to Be Conned by Your Drupal Vendor!How Not to Be Conned by Your Drupal Vendor!
How Not to Be Conned by Your Drupal Vendor!
 
Frontend as a first class citizen
Frontend as a first class citizenFrontend as a first class citizen
Frontend as a first class citizen
 
The Characteristics of a Successful SPA
The Characteristics of a Successful SPAThe Characteristics of a Successful SPA
The Characteristics of a Successful SPA
 
Getting started with dev tools (atl)
Getting started with dev tools (atl)Getting started with dev tools (atl)
Getting started with dev tools (atl)
 
Continuous Integration In A PHP World
Continuous Integration In A PHP WorldContinuous Integration In A PHP World
Continuous Integration In A PHP World
 
27.1.2014, Tampere. Perinteinen mobiilimaailma murroksessa. Petri Niemi: Sing...
27.1.2014, Tampere. Perinteinen mobiilimaailma murroksessa. Petri Niemi: Sing...27.1.2014, Tampere. Perinteinen mobiilimaailma murroksessa. Petri Niemi: Sing...
27.1.2014, Tampere. Perinteinen mobiilimaailma murroksessa. Petri Niemi: Sing...
 
Drupal 8 deeper dive
Drupal 8 deeper diveDrupal 8 deeper dive
Drupal 8 deeper dive
 
Docs Like Code: Strategies and Stories
Docs Like Code: Strategies and StoriesDocs Like Code: Strategies and Stories
Docs Like Code: Strategies and Stories
 
Building mobile apps with PhoneGap and Backbone
Building mobile apps with PhoneGap and BackboneBuilding mobile apps with PhoneGap and Backbone
Building mobile apps with PhoneGap and Backbone
 

Más de Weng Wei (11)

About Caching
About CachingAbout Caching
About Caching
 
谈谈缓存
谈谈缓存谈谈缓存
谈谈缓存
 
用PY实现"Go元编程"
用PY实现"Go元编程"用PY实现"Go元编程"
用PY实现"Go元编程"
 
Go for web
Go for webGo for web
Go for web
 
Go for web
Go for webGo for web
Go for web
 
论使用Python开发推荐引擎的优越性
论使用Python开发推荐引擎的优越性论使用Python开发推荐引擎的优越性
论使用Python开发推荐引擎的优越性
 
Zalora php to_go
Zalora php to_goZalora php to_go
Zalora php to_go
 
A byte of git
A byte of gitA byte of git
A byte of git
 
My understanding of Git
My understanding of GitMy understanding of Git
My understanding of Git
 
Sharding
ShardingSharding
Sharding
 
Inside Zend Framework
Inside Zend FrameworkInside Zend Framework
Inside Zend Framework
 

Último

Último (20)

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 

Why use Go for web development?

  • 1. Why use Go for Web development? Weng Wei, July 2014
  • 3. –Rob Pike “Go is a programming language designed by Google to help solve Google's (big)problems. ”
  • 4. –Derek Collison “ Go will become the dominant language for systems work in IaaS, Orchestration, and PaaS in 24 months.”
  • 5. Go looks cool! but, it is suitable for simple web development?
  • 6. Web? Use MVC! • Quite a number of Go MVC web framework exist: • Beego / Martini / Revel…. • Different approach for MC layers • V layer are mostly the same: Go HTML Template http://golang.org/ pkg/html/template/
  • 7. @yinwang0:Go HTML Template • “Basically usable” template engine • Surprisingly, logic control code in template are not Go itself • Poor expressiveness • Need to bind all template data into a single model • Helper func need to be “registerd” • Quite messy & tedious
  • 8. –Wang Yin “It’s better to build website with more mature frameworks from other language”
  • 9. Template engine must be good for web development!
  • 10. – Wikipedia “PHP(PHP: Hypertext Preprocessor)…server-side scripting language designed for web development.. PHP code can be simply mixed with HTML code..”
  • 12. • “Not possible, Go doesn’t have interpreter” • “Go is NOT script”
  • 13. I think otherwise • Go is turing complete • No things Go can’t go • Only thing more complicated to do with Go • Embedding static compile language in HTML are possible: • ASP.Net
  • 14.
  • 15. Razor • Default template/view engine for ASP.NET MVC • Support embedding c# / vb.net in HTML • .Net developers love it (including me): • http://www.zhihu.com/question/19973649 (Chinese link)
  • 16. How complicated to create GoRazor?
  • 17. GoRazor • http://github.com/sipin/gorazor • PoC in one night • Continuous team improvement:214 commits • Proven with internal large web project
  • 18.
  • 19. • Mature template engine; sublime plug-ins for syntax highlight + auto complete • Able use Go directly in template; no different syntax for flow control • Powerful expressiveness • Rendering template is calling function; models are function parameters • No need to register helper func, directly import in template • Very concise & convinient
  • 20. Demo
  • 21. • If you think Go is not suitable for web development because of poor template engine • Please try https://github.com/sipin/gorazor
  • 22. Of cause, template engine is only the start
  • 23. Is Go suitable for dynamic web development?
  • 24. Dynamic • web is built around string • Go is static compiled; can it: • Obtain object properties via string? • Invoke package/object methods via string? • Create object via string?
  • 25. Reflection • Reflection could meet most of the requirements • Check Martini
  • 26. Issues with Go’s reflection • Let’s put performance aside • Tedious & complicated • Move compilation error to runtime error: no complier check
  • 27. Reflection is not the only way
  • 29. For example • Bind HTTP Post form values to object
  • 30.
  • 31.
  • 32.
  • 33.
  • 34. • Generate all these methods: • NewXXXObjByID(namespace, classname, id string) • ReadForm(params map[string]string)
 • So, 600k LoC
 
 

  • 35. • Code generation makes static compiled language feels “dynamic” • Go can do this, so does all other languages • But, how about the compilation speed?
  • 37. Incremental compilation after editing template
  • 38. • Go’s compilation speed is amazing! • This is a project with 600k LoC on Mid 2011 Macbook Air • We could keep cmd + s / cmd + tab / cmd + R development pace
  • 39. Back to dynamic • If complication is slow, then code-gen approach hurts produtivity • Go compile extreme fast • Go has unique point for dynamic
  • 40. – Rob Pike “interfaces.. the true Go philosophy…”
  • 41. Go’s interface • Define class/method first • May define interface later • Interface query at run-time
  • 42. Example • Check if object has “GetUserID” method • If so, check if current user • If so, allow edit
  • 43.
  • 44. More example • Check if object has “IsDistributed”、“GetPersistentNode” methods • If so, replicate object to other nodes
  • 45.
  • 47.
  • 48.
  • 49. • Go allow querying original object’s interface • Switch between different interfaces at runtime • Interface could be defined in new packages • No need to put all interface combinations for different purpose at one place
  • 50. However, why reinventing the web MVC wheel?
  • 51. But! • Simple web pages? Pick whatever you like • Of cause including Go • Middle size web application, like a forum? • php / Rails / Django / asp.net are more mature • Go also can, if you like re-inventing the wheel • How about large website?
  • 52. Needs for large website • Stability rules • Scalability & Distributed are important • SOA architecture • Performance are critical • Maintainable code (With GoRazor; even the templates are strong- typed & compiler checked)
  • 53. • Quick prototyping, and switch technology/platform? • Works, but these are technical debt! • If we could owe less debt since the beginning, why not?
  • 54. Go is suitable to development large website!
  • 55. Finally, I would like to talk about Go & startup
  • 56. Q & A
  • 57. Reference • https://talks.golang.org/2012/splash.slide • http://open.qiniudn.com/go-next-c-pptx.pdf • http://www.csdn.net/article/2012-09-14/2809984-will-go-be-the-new-go-to- programming-lan • http://weibo.com/1889019865/B4nx3z6GF • http://www.yinwang.org/blog-cn/2014/04/18/golang/ • http://zh.wikipedia.org/wiki/PHP • http://www.ituring.com.cn/article/1339