首先自我介紹一下我自己,我是一個coder,目前主要從事B/S程序開發工作,懂點PHP;ASP;JSP;JS;VB;C;DELPHI;JAVA,另外知道幾個數據庫,除此之外別無所長,那麼我為何會選擇學習GO呢!接下來我對此詳細說明一下.

首先我來說明一下C/S程序和B/S程序的優缺點:

C/S程序主要是運行在客戶端的電腦上,通常採用安裝的形式,以windows操作系統為例,軟件會被編譯成二進制然後以exe或dll等方式存在於客戶端的電腦上,其執行效率是非常高的,當然了除非編程者把代碼寫的非常糟糕,除此之外C/S程序幾乎不需要考慮安全問題和負載問題,除此之外C/S程序開發出來的東西幾乎是不開源的,使用者只能被動接受卻不能更改軟件的功能(如果您會彙編的話那就另當別論了).能夠開發C/S程序的語言有很多,例如C;VB;DELPHI;C++;等等在此不一一列舉!

B/S程序主要是運行在服務器上,訪問者以瀏覽器為媒介輸入網址進行訪問,一個網站往往會在同一時間被成百上千人使用,另外開發B/S程序的語言往往都是腳本,這種腳本語言好處是開發速度快,後期維護簡單,但是相比較于C/S編譯成二進制再執行效率肯定是要降低幾個檔次的.再加上很多人同時使用,就造成了雪上加霜的狀況,但優點也是有的,那就是B/S程序幾乎都是開源的(除了極少數加密狀況外),使用者如果水平足夠的話是可以自己更改軟件功能的.那麼可以開發B/S的語言也有很多,例如:PHP;ASP;.NET;JSP等等

除了上邊我所說的幾種編程語言之外,其實還有幾種語言是蠻特殊的,就像VB,學會了他的子集就可以開發asp,類似的語言還有很多,例如c#;java;python;ruby;go等等,在此不再一一列舉,這些語言除了能用來開發C/S程序外還能用來開發B/S程序,那麼今天我們要討論的話題是GO語言,我為何不選擇java或c#之類的不在今天的討論範圍內.繼續接著剛才的話題,既然B/S負載量這麼大卻又使用腳本語言來開發,那麼效能肯定是要大打折扣的,那麼有沒有一種替代方法不但能把服務端的程序編譯成二進制,又能用來開發B/S程序呢?當然有,那就是GO語言.當然了有一些公司在這方面也做了很多的優化,例如facebook,他們用c重寫了PHP的核心,新的核心叫hiphop并對其開源了,有興趣的朋友可以看看,重寫之後的PHP效能確實有很大的提升,只可惜喪失了很多PHP的特性,另外上手有點複雜,給人曲高寡合的感覺,最終導致叫好不叫座,儘管facebook受益於此改寫之後網站打開速度確實是速度飛快!

我之所以選擇GO語言是因為以下狀況:

1.其效能非常高,號稱僅次於C語言的效能.

2.他與node.js類似,語言本身就是一個web server,不必再用apache;nginx;IIS之類的服務器軟件,這一點很好,可以減少效能損失.

3.學習GO語言非常簡單,對於一個新手來說可以在短時間內上手從事開發工作.

4.語言本身的結構非常簡潔,能省則省把一些不必要的東西都省略掉了

5.其強大的支持後盾,另外其先天對UTF-8的支援度讓我很喜歡.

6.他是開源的.至少不用像delphi似的中途就夭折了

7.很好的版本相容性,用低版本的go語言開發的程序能很好的在高版本的go環境中運行.

8.多線程,我一直期待PHP有這樣的功能,但是迄今為止只能藉助第三方來實現.

9.跨平臺,這個我就更不用說了,go語言不會讓你在windows下開發的軟件移植到linux就不能用了,這是一件超級扯淡的事情,但是目前市面上某些語言還存在這種超級扯淡的問題,用了他們的語言開發好了東西后要先購買服務器操作系統版權,然後購買數據庫版權,然後購買軟件版權,這不是折騰嗎!!

10.還有一些優點我就不再一一說明了

以上就是我選擇并學習go語言的原因.當然了go語言也有很多不足之處,這裡我就不再說明了,有興趣的朋友可以自己去搜一下,那麼從下一篇文章開始我們就從最基礎開始講解GO語言.

另外希望轉載文章的朋友能夠留一個文章出處,http://see7di.cnblogs.com 在此感激不盡!

剛成立了一個QQ群,有興趣討論GO語言的朋友可以加入:195112

GO語言基礎教程:序章的更多相关文章

  1. GO語言基礎教程:數組,切片,map

    這節課我們來講解數組,切片和map,或許您是從其他語言轉到GO語言這邊的,那麼在其他語言的影響下您可能會不太適應GO語言的數組,因為GO語言把數組給拆分成了array,slice和map,接下來的時間 ...

  2. GO語言基礎教程:流程控制

    在開始一個新的章節之前先來回顧上一篇文章的部份,首先我們來看這段代碼: package main import ( "fmt" ) func main(){ var x,y int ...

  3. GO語言基礎教程:數據類型,變量,常量

    GO類似PHP,每行的結尾要加分號來結束,不同點在於GO對此並不強制,這一點又像javascript,另外GO的語句塊是用一對大括號來包裹的,但是go要求左大括號必須要在語句的結尾處,不能在行首出現左 ...

  4. GO語言基礎教程:Hello world!

    首先簡單地說一下GO語言的環境安裝,從 http://golang.org/dl/ 針對自己的操作系統選擇合適的安裝包,然後下載安裝即可,下載的時候注意別選錯了的操作系統,例如go1.3.1.darw ...

  5. GO語言視頻教程下載

    需要的朋友可以加QQ群195112,在群共享內可以下載到.

  6. GO語言視頻教程

    第1课:https://github.com/Unknwon/go-fundamental-programming/blob/master/lectures/lecture1.md Go开发环境搭建h ...

  7. RxSwift學習教程之基礎篇

    前言 我們在 iOS 開發過程中,幾乎無時無刻都要面對異步事件的處理.例如,按鍵點擊.數據保存..音頻後臺播放.交互動畫展示.這些事件並不具備特定時序性,甚至它們可能同時發生. 雖然 Apple 提供 ...

  8. JavaScript基礎知識

    JavaScript基礎知識 1.標籤組使用 <script charset='utf-8' //設置字元集 defet //使腳本延遲到文檔解析完成,Browser已忽略 language=' ...

  9. CSS1-3基礎知識

    CSS1-3基礎知識 1.css排版 css在html內排版: <style type='text/css'> 標記名{} .類型名{} #ID名{} 標記名,.類型名,#ID名{} &l ...

随机推荐

  1. Java关键字:transient,strictfp和volatile简介

    关键字:transient 使用对象:字段 介绍:transient说明一个属性是临时的,不会被序列化. 当对象进行序列化(Serializable)过程时候,有一些属性的状态是瞬时的,这样的对象是无 ...

  2. python命令行参数

    〇.python中对应的argc, argv需要模块:sys参数个数:len(sys.argv)脚本名:    sys.argv[0]参数1:     sys.argv[1]参数2:     sys. ...

  3. SGU196_Matrix Multiplication

    给一个无向图,如果第i个点连接第j条边,那么mat[i][j]=1,否则mat[i][j]=0. 求mat的转置乘以本身得到的矩阵每个位置的和是多少? 理解矩阵的意义就比较好做了. mat[i][j] ...

  4. Jade之标签

    一种简洁的便于书写html的模板语言. 支持所有的html(5)标签和正常的javascript表达式 标签 相比于html,jade的标签只需一个标签名即可,不需要关闭标签,也不需要尖括号. 对于需 ...

  5. java 图示

    java类继承关系 java流类图结构

  6. linux环境变量查看及修改

    例如用命令 echo $PATH 则可以查看该环境变量为/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 添加环境定义一个变量 ...

  7. 模板短信接口调用java,pythoy版(一) 网易云信

    说明 短信服务平台有很多,我只是个人需求,首次使用,算是测试用的,故选个网易(大公司). 稳定性:我只测试了15条短信... 不过前3条短信5分钟左右的延时,后面就比较快.... 我只是需要发短信,等 ...

  8. [数据结构] N皇后问题

    代码: #include <iostream> #include <string.h> #include <algorithm> using namespace s ...

  9. linux 下部署nodejs(两种方式)

    本次博客的编写时用的系统环境,刚装好的Centos 6.4  64位虚拟机. 另外关于linux 其他系统的安装 可以参考https://github.com/joyent/node/wiki/Ins ...

  10. linux-8 基本命令---echo

    1.echo   命令用于终端显示字符或变量 格式:“echo[字符串| 变量]” @1 .echo命令的字符串输出到终端: @2 .echo查看当前SHELL的变量值(前面有$符号): @3 .查看 ...