golang圖靈,golang bleve

本文目錄一覽:

「測試開發全棧化-Go」(1) Go語言基本了解

作為一個測試,作為一個測試開發, 全棧化+管理 是我們未來的發展方向。已經掌握了Java、Python、HTML的你,是不是也想了解下最近異常火爆的Go語言呢?來吧,讓我們一起了解下。

Go 是一個開源的編程語言 ,它能讓構造簡單、可靠且高效的軟體變得容易。

Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發,後來還加入了Ian Lance Taylor, Russ Cox等人,並最終於2009年11月開源,在2012年早些時候發布了Go 1穩定版本。現在Go的開發已經是完全開放的,並且擁有一個活躍的社區。這三個人都是計算機界的大神,有的參與了C語言的編寫,有的還是數學大神,有的還獲得了計算機最高榮譽-圖靈獎。

接下來說說 Go語言的特色 :

簡潔、快速、安全

並行、有趣、開源

內存管理、數組安全、編譯迅速

Go語言的用途 :

Go 語言被設計成一門應用於搭載 Web 伺服器,存儲集群或類似用途的巨型中央伺服器的系統編程語言。

對於高性能分散式系統領域而言,Go 語言無疑比大多數其它語言有著更高的開發效率。它提供了海量並行的支持,這對於 遊戲 服務端的開發而言是再好不過了。

Go語言的環境安裝:

建議直接打開 官方地址因為牆的原因打不開

因為我用的是windows系統,這裡主要講下Windows系統上使用Go語言來編程。

Windows 下可以使用 .msi 後綴(在下載列表中可以找到該文件,如go1.17.2.windows-amd64.msi)的安裝包來安裝。

默認情況下 .msi 文件會安裝在 c:Go 目錄下。你可以將 c:Gobin 目錄添加到 Path 環境變數中。添加後你需要重啟命令窗口才能生效。個人建議還是安裝到 Program Files文件夾中。

使用什麼開發工具來對Go語言進行編寫:

個人建議用VS code, 也可以用Sublime Text來編輯。如果你之前看了我講的HTML語言的學習,肯定已經下載了VS code. 那麼這時你需要在VS code中下載Go語言的擴展插件。

這裡有一個巨大的坑,就是在下載Go的插件和依賴包時,會提示一些包沒有。主要是因為下載的依賴包部分被牆了,只能想別的辦法去下載。

建議參考網頁:

解決vscode中golang插件安裝失敗方法

在學習go的過程中,使用的是vscode,但是一直提示安裝相關插件失敗,然後上網查方法,基本上是叫你建立golang.org目錄什麼的,結果全是錯的,而且都是抄襲,很煩。無意之中看到一位博主分享的方法,他也是飽受上述的垃圾博文困擾,然後找到了解決方法,這裡向他致敬,秉著讓更多人看到正確解決方法的心,我寫下正確的解決方法,希望對你有所幫助,也可以點開原博主鏈接參考:

Go有一個全球模塊代理,設置代理再去安裝golang的插件,就可以安裝成功了。步驟有,首先Windows用戶打開Powershell,一個藍色的界面,注意不是cmd!不知道的直接打開window下面的搜索,然後輸入powershell,搜索出來就可以了。

$env:GO111MODULE=「on」

$env:GOPROXY=「」

go env -w GOPROXY=

go env -w GOPRIVATE=*.corp.example.com

然後我們打開VsCode界面,下面會提示安裝插件,我們選擇Install ALL,就會安裝成功

當你在運行Go語言程序時,提示所有的插件包都已經安裝成功了時,就可以正常使用了,要不然一堆報錯會讓你非常心煩。

好了,今天先到這裡,晚安、下班~

為什麼go語言適合開發網遊伺服器端

前段時間在golang-China讀到這個貼:

個人覺得golang十分適合進行網遊伺服器端開發,寫下這篇文章總結一下。

從網遊的角度看:

要成功的運營一款網遊,很大程度上依賴於玩家自發形成的社區。只有玩家自發形成一個穩定的生態系統,遊戲才能持續下去,避免鬼城的出現。而這就需要多次大量導入用戶,在同時在線用戶量達到某個臨界點的時候,才有可能完成。因此,多人同時在線十分有必要。

再來看網遊的常見玩法,除了排行榜這類統計和數據匯總的功能外,基本沒有需要大量CPU時間的應用。以前的項目里,即時戰鬥產生的各種傷害計算對CPU的消耗也不大。玩家要完成一次操作,需要通過客戶端-伺服器端-客戶端這樣一個來回,為了獲得高響應速度,滿足玩家體驗,伺服器端的處理也不能佔用太多時間。所以,每次請求對應的CPU佔用是比較小的。

網遊的IO主要分兩個方面,一個是網路IO,一個是磁碟IO。網路IO方面,可以分成美術資源的IO和遊戲邏輯指令的IO,這裡主要分析遊戲邏輯的IO。遊戲邏輯的IO跟CPU佔用的情況相似,每次請求的位元組數很小,但由於多人同時在線,因此並發數相當高。另外,地圖信息的廣播也會帶來比較頻繁的網路通信。磁碟IO方面,主要是遊戲數據的保存。採用不同的資料庫,會有比較大的區別。以前的項目里,就經歷了從MySQL轉向MongoDB這種內存資料庫的過程,磁碟IO不再是瓶頸。總體來說,還是用內存做一級緩衝,避免大量小數據塊讀寫的方案。

針對網遊的這些特點,golang的語言特性十分適合開發遊戲伺服器端。

首先,go語言提供goroutine機製作為原生的並發機制。每個goroutine所需的內存很少,實際應用中可以啟動大量的goroutine對並發連接進行響應。goroutine與gevent中的greenlet很相像,遇到IO阻塞的時候,調度器就會自動切換到另一個goroutine執行,保證CPU不會因為IO而發生等待。而goroutine與gevent相比,沒有了python底層的GIL限制,就不需要利用多進程來榨取多核機器的性能了。通過設置最大線程數,可以控制go所啟動的線程,每個線程執行一個goroutine,讓CPU滿負載運行。

同時,go語言為goroutine提供了獨到的通信機制channel。channel發生讀寫的時候,也會掛起當前操作channel的goroutine,是一種同步阻塞通信。這樣既達到了通信的目的,又實現同步,用CSP模型的觀點看,並發模型就是通過一組進程和進程間的事件觸發解決任務的。雖然說,主流的編程語言之間,只要是圖靈完備的,他們就都能實現相同的功能。但go語言提供的這種協程間通信機制,十分優雅地揭示了協程通信的本質,避免了以往鎖的顯式使用帶給程序員的心理負擔,確是一大優勢。進行網遊開發的程序員,可以將遊戲邏輯按照單線程阻塞式的寫,不需要額外考慮線程調度的問題,以及線程間數據依賴的問題。因為,線程間的channel通信,已經表達了線程間的數據依賴關係了,而go的調度器會給予妥善的處理。

另外,go語言提供的gc機制,以及對指針的保護式使用,可以大大減輕程序員的開發壓力,提高開發效率。

展望未來,我期待go語言社區能夠提供更多的goroutine間的隔離機制。個人十分推崇erlang社區的脆崩哲學,推動應用發生預期外行為時,儘早崩潰,再fork出新進程處理新的請求。對於協程機制,需要由程序員保證執行的函數不會發生死循環,導致線程卡死。如果能夠定製goroutine所執行函數的最大CPU執行時間,及所能使用的最大內存空間,對於提升系統的魯棒性,大有裨益。

GitHub 上有哪些值得推薦的開源電子書

語言無關類

操作系統

鳥哥的Linux私房菜 (簡體)

Linux 系統高級編程

The Linux Command Line (中英文版)

Linux 設備驅動 (第三版)

深入分析Linux內核源碼

UNIX TOOLBOX

Docker中文指南

Docker —— 從入門到實踐

FreeRADIUS新手入門

Mac 開發配置手冊

FreeBSD 使用手冊

Linux 命令行(中文版)

智能系統

一步步搭建物聯網系統

web伺服器

Nginx開發從入門到精通 (淘寶團隊出品)

版本控制

Git教程 (本文由  @廖雪峰 創作,如果覺得本教程對您有幫助,可以去  iTunes 購買)

git – 簡易指南

猴子都能懂的GIT入門

Git 參考手冊

Pro Git

Git Magic

GotGitHub

Git Community Book 中文版

Mercurial 使用教程

HgInit (中文版)

沉浸式學 Git

Git-Cheat-Sheet (感謝 @flyhigher139 翻譯了中文版)

GitHub秘籍

NoSQL

NoSQL資料庫筆談 (PDF)

Redis 設計與實現

Redis 命令參考

帶有詳細注釋的 Redis 3.0 代碼

帶有詳細注釋的 Redis 2.6 代碼

The Little MongoDB Book

The Little Redis Book

Neo4j 簡體中文手冊 v1.8

Neo4j .rb 中文資源

MySQL

MySQL索引背後的數據結構及演算法原理

項目相關

持續集成(第二版) (譯言網)

讓開發自動化系列專欄

追求代碼質量

selenium 中文文檔

Joel談軟體

約耳談軟體(Joel on Software)

Web

關於瀏覽器和網路的 20 項須知

前端知識體系

瀏覽器開發工具的秘密

Chrome 開發者工具中文手冊

Chrome擴展開發文檔

Grunt中文文檔

移動Web前端知識庫

正則表達式30分鐘入門教程

前端開發體系建設日記

移動前端開發收藏夾

JSON風格指南

HTTP 介面設計指北

前端資源分享(一)

前端資源分享(二)

前端代碼規範 及 最佳實踐

w3school教程整理

大數據

大數據/數據挖掘/推薦系統/機器學習相關資源

編程藝術

程序員編程藝術

每個程序員都應該了解的內存知識(譯)【第一部分】

取悅的工序:如何理解遊戲 (豆瓣閱讀,免費書籍)

其他

OpenWrt智能、自動、透明翻牆路由器教程

語言相關類 AWK

awk程序設計語言

C/C++

C++ 並發編程指南 (@傅海平ICT)

Linux C編程一站式學習 (宋勁杉, 北京亞嵌教育研究中心)

CGDB中文手冊

100個gdb小技巧

100個gcc小技巧

ZMQ 指南

How to Think Like a Computer Scientist (中英文版)

跟我一起寫Makefile(PDF)

GNU make中文手冊

GNU make 指南

Google C++ 風格指南

C/C++ Primer (by @andycai)

簡單易懂的C魔法

Cmake 實踐 (PDF版)

C++ FAQ LITE(中文版)

C++ Primer 5th Answers

CSS/HTML

學習CSS布局

通用 CSS 筆記、建議與指導

CSS參考手冊

Emmet 文檔

前端代碼規範 (騰訊alloyteam團隊)

Dart

Dart 語言導覽

Fortran

Fortran77和90/95編程入門

Java

實時 Java 系列

Apache Shiro 用戶指南

使用 Eclipse 和 Java SE 6 創建獨立 Web Services 應用程序

第 1 部分: Web Services 服務端應用程序

第 2 部分: Web 服務客戶端應用程序

JavaServer Faces 1.2 入門

第 1 部分: 構建基本應用程序

第 2 部分: JSF 生命周期、轉換、檢驗和階段監聽器

用 Eclipse Europa 進行 Web 開發

第 1 部分: Eclipse Java EE

第 2 部分: PHP 開發工具

第 3 部分: Ruby Development Toolkit 和 RadRails

使用 JavaServer Faces 構建 Apache Geronimo 應用程序

第 1 部分: 使用 Eclipse 和 Apache MyFaces Core 構建基本的應用程序

第 2 部分: 在 JavaServer Faces 中使用 Tomahawk

第 3 部分: 使用 ajax4jsf 添加 Ajax 功能

第 4 部分: 使用 Apache Trinidad 組件擴展 JSF

第 5 部分: 將 JSF 應用程序與 Spring 集成

Apache Geronimo 和 Spring 框架

第 1 部分: 開發方法學

第 2 部分: 構建第一個應用程序

第 3 部分: 集成 DAO 與 ORM

第 4 部分: 混合使用 Spring AOP 和 Spring Web Flow

第 5 部分: Spring MVC

第 6 部分: Spring MVC:使用 Web 視圖技術

終極 mashup —— Web 服務和語義 Web

第 1 部分: 使用與組合 Web 服務

第 2 部分: 管理 Mashup 數據緩存

第 3 部分: 理解 RDF 和 RDFs

第 4 部分: 創建本體

第 5 部分: 切換 Web 服務

Jersey 2.x 用戶指南

MyBatis中文文檔

JavaScript

Google JavaScript 代碼風格指南

Airbnb JavaScript 規範

JavaScript 標準參考教程(alpha)

Javascript編程指南 (源碼)

javascript 的 12 個怪癖

JavaScript 秘密花園

JavaScript核心概念及實踐 (PDF) (此書已由人民郵電出版社出版發行,但作者依然免費提供PDF版本,希望開發者們去購買,支持作者)

《JavaScript 模式》翻譯,此書中文版有售,但是紙質書翻譯的還沒有這個版本翻譯的好

命名函數表達式探秘 (注:原文由為之漫筆翻譯,原始地址無法打開,所以此處地址為我博客上的備份)

學用 JavaScript 設計模式 (開源中國)

深入理解JavaScript系列

ECMAScript 6 入門 (作者:阮一峰)

jQuery

jQuery 解構

簡單易懂的JQuery魔法

How to write jQuery plugin

Node.js

Node入門

七天學會NodeJS

Nodejs Wiki Book (繁體中文)

express.js 中文文檔

koa 中文文檔

使用 Express + MongoDB 搭建多人博客

Express框架

nodejs文檔

Node.js 包教不包會

Learn You The Node.js For Much Win! (中文版)

Node debug 三法三例

underscore.js

Underscore.js中文文檔

backbone.js

backbone.js入門教程 (PDF)

Backbone.js入門教程第二版

Developing Backbone.js Applications(中文版)

AngularJS

AngularJS最佳實踐和風格指南

AngularJS中譯本

AngularJS入門教程

構建自己的AngularJS

在Windows環境下用Yeoman構建AngularJS項目

zepto 簡明中文手冊

Sea.js

Hello Sea.js

CoffeeScript

CoffeeScript Cookbook

The Little Book on CoffeeScript中文版

ExtJS

Ext4.1.0 中文文檔

Chrome擴展及應用開發

JavaScript入門教程

PHP

PHP調試技術手冊(PDF)

XDebug 2中文手冊(譯) (CHM)

PHP之道

PHP 最佳實踐

PHP安全最佳實踐

深入理解PHP內核

PHP擴展開發及內核應用

CodeIgniter 用戶指南

Laravel4 中文文檔

Laravel 入門

Symfony2中文文檔 (未譯完)

Phalcon中文文檔(翻譯進行中)

YiiBook幾本Yii框架的在線教程

簡單易懂的PHP魔法

swoole文檔及入門教程

iOS

iOS開發60分鐘入門

iOS7人機界面指南

Google Objective-C Style Guide 中文版

iPhone 6 屏幕揭秘

Apple Watch開發初探

馬上著手開發 iOS 應用程序

網易斯坦福大學公開課:iOS 7應用開發字幕文件

Android

Android Design(中文版)

Google Android官方培訓課程中文版

Android學習之路

Python

小白的Python教程

簡明Python教程

零基礎學Python

Python 2.7 官方教程中文版

Python 3.3 官方教程中文版

深入 Python 3

PEP8 Python代碼風格規範

Google Python 風格指南 中文版

Python入門教程 (PDF)

Python的神奇方法指南

笨辦法學 Python (PDF版下載)

Django 文檔中文版

Django 最佳實踐

The Django Book 中文版

web.py 0.3 新手指南

Web.py Cookbook 簡體中文版

Dive Into Python 中文版

Bottle 文檔中文版 (需翻牆)

Flask 文檔中文版

Jinja2 文檔中文版

Werkzeug 文檔中文版

Flask之旅

Introduction to Tornado 中文翻譯

Python自然語言處理中文版 (感謝陳濤同學的翻譯,也謝謝  @shwley 聯繫了作者)

Python 繪圖庫 matplotlib 官方指南中文翻譯

Scrapy 0.25 文檔

ThinkPython

Ruby

Ruby 風格指南

Rails 風格指南

笨方法學 Ruby

Ruby on Rails 指南

Ruby on Rails 實戰聖經

Ruby on Rails Tutorial 原書第 2 版 (本書網頁版免費提供,電子版以 PDF、EPub 和 Mobi 格式提供購買,僅售 9.9 美元)

編寫Ruby的C拓展

Ruby 源碼解讀

Shell

Shell腳本編程30分鐘入門

Go

Go編程基礎

Go入門指南

學習Go語言 (PDF)

Go Web 編程 (此書已經出版,希望開發者們去購買,支持作者的創作)

Go實戰開發 (當我收錄此項目時,作者已經寫完第三章,如果讀完前面章節覺得有幫助,可以給作者捐贈,以鼓勵作者的繼續創作)

Network programming with Go 中文翻譯版本

Groovy

實戰 Groovy 系列

LaTeX

一份其實很短的 LaTeX 入門文檔

一份不太簡短的 LATEX 2ε 介紹 (PDF版)

LISP

ANSI Common Lisp 中文翻譯版

Lua

Lua編程入門

Haskell

Real World Haskell 中文版

R

R語言忍者秘笈

Scala

Scala課堂 (Twitter的Scala中文教程)

Effective Scala(Twitter的Scala最佳實踐的中文翻譯)

Scala指南

Swift

The Swift Programming Language 中文版

Perl

Modern Perl 中文版

Perl 程序員應該知道的事

Prolog

笨辦法學Prolog

Vim中文文檔

Vimscript

笨方法學Vimscript 中譯本

Vim中文文檔

讀書筆記及其它 讀書筆記

編譯原理(紫龍書)中文第2版習題答案

把《編程珠璣》讀薄

Effective C++讀書筆記

Golang 學習筆記、Python 學習筆記、C 學習筆記 (PDF)

Jsoup 學習筆記

學習筆記: Vim、Python、memcached

圖靈開放書翻譯計劃–C++、Python、Java等

蒂姆·奧萊利隨筆 (由譯言網翻譯,電子版免費)

Octave 入門 (PDF版)

SICP 解題集

精彩博客集合

正則表達式簡明參考

最難的開發語言

第十名、R語言

R語言,一種自由軟體編程語言與操作環境,主要用於統計分析、繪圖、數據挖掘。R基於S語言的一個GNU計劃項目,所以也可以當作S語言的一種實現,通常用S語言編寫的代碼都可以不作修改的在R環境下運行。R的語法是來自Scheme。

提名詞

R語言作者,George Ross Ihaka:在奧克蘭大學統計系任副教授,是R語言的最初作者。

2

/10

第九名、Python

頒獎詞

Python是一種廣泛使用的高級編程語言,屬於通用型編程語言。作為一種解釋型語言,Python的設計哲學強調代碼的可讀性和簡潔的語法。相比於C++或Java,Python讓開發者能夠用更少的代碼表達想法。不管是小型還是大型程序,該語言都試圖讓程序的結構清晰明了。

提名詞

Python語言作者,Guido van Rossum:生於荷蘭哈勒姆,計算機程序員,為Python程序設計語言的最初設計者及主要架構師。

3

/10

第八名、C語言

頒獎詞

C是一種通用的編程語言,廣泛用於系統軟體與應用軟體的開發。C語言具有高效、靈活、功能豐富、表達力強和較高的可移植性等特點。C語言編譯器普遍存在於各種不同的操作系統中,例如Microsoft Windows、macOS、Linux、Unix等。C語言的設計影響了眾多後來的編程語言,例如C++、Objective-C、Java、C#等。

提名詞

C語言作者,Dennis MacAlistair Ritchie:美國計算機科學家。黑客圈子通常稱他為「dmr」。他是C語言的創造者、Unix操作系統的關鍵開發者,對計算機領域產生了深遠影響,並與肯·湯普遜同為1983年圖靈獎得主。

4

/10

第七名、Go

頒獎詞

Go(又稱Golang)是Google開發的一種靜態強類型、編譯型、並髮型,並具有垃圾回收功能的編程語言。Go的語法接近C語言,但對於變數的聲明有所不同。Go支持垃圾回收功能。

提名詞

Go語言作者,Robert C. Pike:來自加拿大的程序員,曾經加入貝爾實驗室,為 UNIX小組的成員。他與肯·湯普遜共同開發了UTF-8。目前為 google的工程師,參與編程語言 Go與Sawzall的研發工作。

5

/10

第六名、JavaScript

頒獎詞

JavaScript,通常縮寫為JS,是一種高級的,解釋執行的編程語言。JavaScript是一門基於原型、函數先行的語言,是一門多範式的語言,它支持面向對象編程,命令式編程,以及函數式編程。它已經由ECMA(歐洲計算機製造商協會)通過ECMAScript實現語言的標準化。它被世界上的絕大多數網站所使用,也被世界主流瀏覽器(Chrome、IE、Firefox、Safari、Opera)支持。

提名詞

JavaScript語言作者,Brendan Eich:美國程序員與企業家,JavaScript主要創造者與架構師,曾任Mozilla公司的首席技術官,並曾短暫擔任首席執行官。

6

/10

第五名、Objective-C

頒獎詞

Objective-C是一種通用、高級、面向對象的編程語言。它擴展了標準的ANSI C編程語言,將Smalltalk式的消息傳遞機制加入到ANSI C中。目前主要支持的編譯器有GCC和Clang(採用LLVM作為後端)。

提名詞

Objective-C作者,Brad Cox:美國計算機科學家。於傅爾曼大學主修化學與數學,於芝加哥大學取得數學生物學博士學位。Objective-C主要作者。

7

/10

第四名、PHP

頒獎詞

PHP(全稱:PHP:Hypertext Preprocessor,即「PHP:超文本預處理器」)是開源的通用計算機腳本語言,尤其適用於網路開發並可嵌入HTML中使用。PHP的語法借鑒吸收C語言、Java和Perl等流行計算機語言的特點,易於一般程序員學習。PHP的主要目標是允許網路開發人員快速編寫動態頁面,但PHP也被用於其他很多領域。

提名詞

PHP語言作者,Rasmus Lerdorf:出生於格陵蘭島凱凱塔蘇瓦克,是一個丹麥程序員,他擁有加拿大國籍。他也是編程語言PHP的創始人,其中PHP的頭兩個版本是由他編寫的,後來他也參與PHP後續版本的開發。

8

/10

第三名、Java

頒獎詞

Java是一種廣泛使用的計算機編程語言,擁有跨平台、面向對象、泛型編程的特性,廣泛應用於企業級Web應用開發和移動應用開發。Java編程語言是個簡單、面向對象、分散式、解釋性、健壯、安全與系統無關、可移植、高性能、多線程和動態的語言。

提名詞

Java語言作者,James Gosling:出生於加拿大,軟體專家,Java編程語言的共同創始人之一,一般公認他為「Java之父」。

9

/10

第二名、C++

頒獎詞

C++是一種使用廣泛的計算機程序設計語言。它是一種通用程序設計語言,支持多重編程模式,例如過程化程序設計、數據抽象、面向對象程序設計、泛型程序設計和設計模式等。

提名詞

C++語言作者,Bjarne Stroustrup:生於丹麥奧胡斯郡,計算機科學家。他以創造C++編程語言而聞名,被稱為「C++之父」。

10

/10

第一名、Visual Basic .NET

頒獎詞

Visual Basic .NET(VB.NET)是.NET Framework框架下的一種多重編程範式高級語言。Visual Basic .NET屬Basic系語言,其語法特點是以極具親和力的英文單詞為基礎標識,以及與自然語言極其相近的邏輯表達,有時候你會覺得寫VB.NET代碼就好像在寫英文句子一樣,從這個角度來說,VB.NET似乎是最高級的一門編程語言,當然在Basic系語言中VB.NET也確實是迄今為止最強大的一門編程語言。

提名詞

Visual Basic .NET作者,Alan Cooper:交互設計的提倡者。庫珀有些時候被叫做 Visual Basic 之父,雖然大多數的工作是由微軟的內部開發團隊完成的,但是對於Windows可視化設計工具的創意是來源於庫珀的。

erlang golang學習哪個

我最早使用的語言是Java和Python, 並且一直都對Python充滿好感, 我喜歡這種很樸實和高效率的感覺, 但我卻最後沒有採用Python,原因其實也很簡單, 我就是不喜歡縮進語法, 就跟很多人換工作僅僅是為了屏幕更大一點一樣, 另外就是有了同樣很棒的可選方案, 這就是Ruby, 所以我最終採用了Ruby作為主力編程語言, 同樣也為不能使用Python而有一點小遺憾,畢竟Python的健壯性比Ruby好很多,只不過Ruby也一直在進步, 所以這一點無傷大雅

我們都知道,無論是Python還是Ruby,甚至Java, 都是在解決業務層的問題, 屬於應用型語言, 以解決業務邏輯為主, 但還有一個領域是系統領域,偏網路層和底層操作,在這一塊我一直在尋找一種優雅的方案, C++被我首先給淘汰掉了, C的開發效率太低, Java倒是比較合適, 就是太臃腫,而且缺少系統編程的基因,畢竟它是企業級開發出身的

最後我選擇了Erlang, 因為它在網路層方面表現優秀, 同時容錯性和健壯性都很不錯, 它的虛擬機是唯一可以跟JVM媲美的, 而且還有OTP的超重量級武器, 幾乎可以是通殺網路層應用, 但根據我的總結它有一個硬傷和一個軟肋,這一點後面展開,可以說選擇Erlang是我目前所知道的方案裡面是最優的

直到有一天我了解了Golang, 我知道Golang其實也蠻早的, 大概08年的時候就知道Google在搞一門奇怪的語言, 之後的幾年,一直有不少以老莫為代表的人在嘀咕Golang, 其實我一直沒太關注,我從ROR中吸取的經驗是,成熟度對於商用很重要, 後來基於Golang開發的產品越來越多,讓我不得不去研究一下, 這我才知道, 這就是我夢想中的Python, 效率和性能達到了最佳的平衡,對Go了解越多, 就越不願意用Erlang寫代碼,主要原因:

1、Erlang的硬傷在於代碼的可讀性、表現力, 讓我來舉個小例子, 比如你為你的系統軟體構建一個RESTFUL的介面,我們大致了解一下代碼風格,先不說Erlang, 無論是你c/c++/python/ruby/java 出身, 對Go是不是有種很久違的感覺, 為什麼說是硬傷? 因為對一門語言來說,語法是不大可能會大幅度變更的, 而且不會出現大的變化, 我不知道有沒有人讀過《松本行弘的編程世界》,裡面闡述的道理很明白, 真正好的編程方式是人去主宰計算機而不是計算機主宰人, 我感覺Erlang就有點主宰我的編程思維的感覺(我的視力本身就不好,它還在不斷的扼殺我的眼睛!), 編程首先是門邏輯學,其次是工程學,最後才是數學, 又讓我想起吳軍的《數學之美》所說的, 人工智慧上個世紀一直在走彎路, 期望機器的高度圖靈完備, 而忽視人類本身已有的文明,統計歸納的應用

2、Erlang的軟肋在於高質量的庫少,儘管有不少殺手級應用, 同樣Go在這方面也是軟肋, 這一點對於一個不到五年的語言有情可原, 但對於一個20多年的語言是不是有點說不過去, 比如你用json解析庫,很多人都是從mochiweb這個基本不更新的庫中去抽取, 而我認為對於類似json這種東西可以考慮融入到語言標準庫中, 因為未來的商業軟體的api化趨勢越來越明顯,說的難聽點 , 一個倚老賣老一個與時俱進,反正我對Golang的庫一點也不擔心, 目前的成績易經非常棒了, 遠遠優於Ruby/Python的前五年, 可參見已有的高質量的庫列表

3、Erlang不合群, 這主要體現在跟其他語言的交互性上, 當然這也有深層次的原因, Erlang本身有自己的哲學, 如出錯恢復機制, 你融入一個其他語言的東西進去, 這帳就不好算,就好比你硬要讓一個喝咖啡的跟一個吃大蒜的坐在一起, 總之你寫一個Erlang的port遠遠比Go複雜, 甚至比Python/Java還要複雜, 這就造成了Erlang在底層編程上效果不是很好, 沒法利用linux已有的很多優秀成果,我一直認為Erlang的什麼的mysql/pg/oracle驅動都沒有必要存在, Erlang一定是一個self-container應用, 你只要用到了其他東西, 根據木桶理論, 你就不敢號稱9個9,以系統的眼光看問題, 我覺得一個系統的魯棒性不能依賴於某一組件, 這也是為什麼愛立信本身的Erlang應用並不廣泛

4、說說數據類型吧, 我不止聽到1個人說Erlang對字元串的處理不有好, 它把string當做list來處理,其實本質上是該這麼,但,還是那句話, 違背了面向人的哲學, 應該做一些DSL, 比如Golang裡面的 := 就是一個糖衣, 等價於 var xx yyy = zzzz, 大大方便的程序員少敲不少字元, Golang裡面對字元轉可以說基本和python差不多, slice map函數很強大, 支持lambda條件,雖然Erlang的基本類型很少, 但有很多構造, 所謂構造等價於Golang裡面複雜的struct, 也奇怪了,我就是感覺Erlang構造傷眼睛好嗎?可能是各種括弧的比對的原因吧, 而且我認為這是不必要的, 顯然Erlang缺少DSL的基因, 當然跟Erlang出身的年代有關, 我不誇張的說, 自打用Erlang以後我的視力又下降了100度左右, 我不是很喜歡lisp所說的符號也是一種語法, 可能這又跟函數式編程有關吧:形式推導遠大於邏輯演繹

5、其實我最不關注的是性能問題, 因為隨著摩爾定律, 單位計算單元的性價比會無限高,但Golang既然提出它的性能逼近C, 那我還是提一下吧, 當然, Erlang也還可以, 雖然比Java慢, 但跟Python一個檔次吧

6、再談談報錯機制, 因為Erlang的的報錯信息太讓人糾結了, 起初以為我不會看出錯信息, 後來也使用了Sasl, 還是不夠直觀,甚至有時要用工具分析crash文件來定位問題,還是跟Erlang的哲學有關, 在Erlang中一切都是並行的, 所以它根本不care是物理哪一行出錯, 只跟Actor綁定, 然後告訴你Actor的ID和出錯代號, 你自己憑經驗去分析吧,這樣做的好處是可以很方便定位出並行中出現的問題,但凡事都是相對的, 在這一點上有點糾枉過正,根據我的經驗, 絕大部分時候我只希望先給我明確的指出哪一行出錯了好嗎? 甚至把順序的backtrace用完整的英文句子列印出來好嗎?至於並行中的錯誤及時在命令式多線程語言中是不常見的,雖然並不是沒有, 但遇到錯誤我再費勁去調試好了, 但並不是所有的邏輯都用並行的思維去定位問題, 我甚至認為, 對於一個系統不完全是並行也不完全是串列,跟好比我們衡量世界不能單純的唯物也不能完全的唯心一樣, 這一點Golang就做了很好的折中, 不需要並行的時候你老老實實的寫串列代碼, 需要並行的時候也有較複雜的機制來應對, 合乎情理

7、再說說招人吧, 以前招過好幾個C出來的人,說實話水平很好, 可以一周就完成一個小組件, libevent用的熟的很,後來我逼人家用Erlang,結果把人家逼走了,至今我還很後悔, 自己的一廂情願強加在別人身上真是太不合適了,但我招純Erlang出來的人,可以說比招objc的人還難, 沒有人,空談技術的優雅性首先就是不靠譜的,再看看郵件列表, Golang的活躍度明顯比Erlang高很多, 基本逼近Ruby,更重要的是, 我根本不擔心Golang的人才,因為只要熟悉Python/C/Ruby/或者C++, 基本可以實現半天入門, 之後就可以噼里啪啦邊搜資料邊幹活了,雖然有足夠的深度,但門檻極其平緩,工程人員也可以復用很多已有的知識。 Erlang在這一點其實跟第一點硬傷有關,大部分人學一周都摸不著頭腦,不是每個人的抽象思維和世界觀都是一樣的好嗎, 所以函數式編程儘管不比命令式語言起步晚,但始終學的人很少,這就是歷史, 對於大部分人, 更希望解決問題,創造價值, 而不是數學來推導去

8、最後我建議, 如果你是玩c/c++的, 現在開始學Golang,是最好的時機, 跟一門靠譜的語言一起成長, 這種感覺非常棒, 你用Erlang折騰1個應用, 用Go恐怕都完成了10個開源項目, 當然,也要結合自己的口味, Golang就是Sublime Text, Erlang就是Emacs

相信自己的判斷,相信自己的邏輯, 贏就是贏,輸就是輸

轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/293804.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-26 13:14
下一篇 2024-12-26 13:15

相關推薦

  • 使用Golang調用Python

    在現代軟體開發中,多種編程語言的協作是相當普遍的。其中一種使用場景是Golang調用Python,這使得在使用Python庫的同時,可以利用Golang的高性能和強大並發能力。這篇…

    編程 2025-04-29
  • 使用Golang創建黑色背景圖片的方法

    本文將從多個方面介紹使用Golang創建黑色背景圖片的方法。 一、安裝必要的代碼庫和工具 在開始創建黑色背景圖片之前,我們需要先安裝必要的代碼庫和工具: go get -u git…

    編程 2025-04-29
  • Golang中使用strings.Split函數進行字元串分割的方法

    一、Split函數的基本用法 字元串是編程中常見的數據類型,它們可以在程序中被處理、存儲和傳輸。在Go語言中,字元串也是一個基本的數據類型,而strings包提供了一些操作字元串的…

    編程 2025-04-23
  • Golang環境變數全面解析

    Golang是一門非常流行的開發語言,擁有高效的CGO、簡單易懂的語法、高並發能力等優點,然而它也需要使用環境變數來配置一些參數。在本篇文章中,我們將從多個方面對Golang環境變…

    編程 2025-04-23
  • 深入下探golang http server

    Go語言已經成為了軟體開發領域的熱門語言,它的高性能、應用廣泛、安全性好,使得它成為了眾多開發者心目中的首選編程語言。在眾多應用場景中,golang http server的應用非…

    編程 2025-04-23
  • Compacted:一個高性能的Golang緩存庫

    一、簡介 Compacted是一個使用Golang編寫的緩存庫,旨在提供高性能的內存緩存功能。相對於其他常見的緩存庫,Compacted在內存使用和性能方面都做了一定的優化。 緩存…

    編程 2025-04-23
  • Golang nil解析

    一、什麼是nil Nil是Golang語言中的一個預定義標識符,表示一個零值對象,通常表示一個空指針。Nil被定義為指針類型、函數類型、介面類型、map類型、Slice類型、Cha…

    編程 2025-04-23
  • Golang中文社區介紹

    Go語言或者叫Golang是一個開源項目,目前是由Google開發維護的一種靜態類型、並發安全、編譯型的編程語言。Go語言的特點是結構清晰、並發能力強、具有垃圾回收機制並且支持跨平…

    編程 2025-04-23
  • 詳解golang walk控制項庫

    Golang提供的可視化庫有很多個,其中walk是一個比較好用且強大的庫。本文將從多個方面對walk進行詳細闡述,包括基本控制項、布局、菜單、圖標等方面的內容。 一、控制項基礎 Gol…

    編程 2025-04-22
  • Golang泛型詳解

    Golang泛型成為眾多開發人員關注的話題,因為它使得代碼更加通用、可重用、簡單、易於維護。那麼,什麼是泛型、為什麼它如此重要,如何使用它?本文將從多個方面為您詳細闡述Golang…

    編程 2025-04-20

發表回復

登錄後才能評論