Go語言于2009年11月正式宣布推出,成為開放源代碼項(xiàng)目,并在Linux及Mac OS X平臺上進(jìn)行了實(shí)現(xiàn),后追加Windows系統(tǒng)下的實(shí)現(xiàn)。
成都創(chuàng)新互聯(lián)公司專注于雙城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供雙城營銷型網(wǎng)站建設(shè),雙城網(wǎng)站制作、雙城網(wǎng)頁設(shè)計(jì)、雙城網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造雙城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供雙城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
谷歌資深軟件工程師羅布·派克(Rob Pike)表示,“Go讓我體驗(yàn)到了從未有過的開發(fā)效率?!迸煽吮硎?,和今天的C++或C一樣,Go是一種系統(tǒng)語言。他解釋道,“使用它可以進(jìn)行快速開發(fā),同時它還是一個真正的編譯語言,我們之所以現(xiàn)在將其開源,原因是我們認(rèn)為它已經(jīng)非常有用和強(qiáng)大?!?/p>
2007年,谷歌把Go作為一個20%項(xiàng)目開始研發(fā),即讓員工抽出本職工作之外時間的20%,投入在該項(xiàng)目上。除了派克外,該項(xiàng)目的成員還有其它一些谷歌工程師。
派克表示,編譯后Go代碼的運(yùn)行速度與C語言非常接近,而且編譯速度非??欤拖裨谑褂靡粋€交互式語言。
現(xiàn)有編程語言均未專門對多核處理器進(jìn)行優(yōu)化。派克表示,Go就是谷歌工程師為這類程序編寫的一種語言。它不是針對編程初學(xué)者設(shè)計(jì)的,但學(xué)習(xí)使用它也不是非常困難。Go支持面向?qū)ο?,而且具有真正的封裝(closures)和反射(reflection)等功能。
在學(xué)習(xí)曲線方面,派克認(rèn)為Go與Java類似,對于Java開發(fā)者來說,應(yīng)該能夠輕松學(xué)會Go。
之所以將Go作為一個開源項(xiàng)目發(fā)布,目的是讓開源社區(qū)有機(jī)會創(chuàng)建更好的工具來使用該語言,例如Eclipse IDE中的插件。目前還沒有支持Go的IDE。
在目前谷歌公開發(fā)布的所有網(wǎng)絡(luò)應(yīng)用中,均沒有使用Go。但是谷歌已經(jīng)使用該語言開發(fā)了幾個內(nèi)部項(xiàng)目。
派克表示,Go是否會對谷歌即將推出的Chrome OS產(chǎn)生影響,現(xiàn)在還言之尚早,不過Go的確可以和Native Client配合使用。他表示,“Go可以讓應(yīng)用完美的運(yùn)行在瀏覽器內(nèi)。”例如,使用Go可以更高效的實(shí)現(xiàn)Wave,無論是在前端還是后臺。
Go語言是一種新的語言,一種并發(fā)的、帶垃圾回收的、快速編譯的語言。它具有以下特點(diǎn):
1.它可以在一臺計(jì)算機(jī)上用幾秒鐘的時間編譯一個大型的Go程序。
2.Go語言為軟件構(gòu)造提供了一種模型,它使依賴分析更加容易,且避免了大部分C風(fēng)格include文件與庫的開頭。
3.Go語言是靜態(tài)類型的語言,它的類型系統(tǒng)沒有層級。因此用戶不需要在定義類型之間的關(guān)系上花費(fèi)時間,這樣感覺起來比典型的面向?qū)ο笳Z言更輕量級。
4.Go語言完全是垃圾回收型的語言,并為并發(fā)執(zhí)行與通信提供了基本的支持。
按照其設(shè)計(jì),Go打算為多核機(jī)器上系統(tǒng)軟件的構(gòu)造提供一種方法。
Go語言是一種編譯型語言,它結(jié)合了解釋型語言的游刃有余,動態(tài)類型語言的開發(fā)效率,以及靜態(tài)類型的安全性。它也打算成為現(xiàn)代的,支持網(wǎng)絡(luò)與多核計(jì)算的語言。要滿足這些目標(biāo),需要解決一些語言上的問題:一個富有表達(dá)能力但輕量級的類型系統(tǒng),并發(fā)與垃圾回收機(jī)制,嚴(yán)格的依賴規(guī)范等等。這些無法通過庫或工具解決好,因此Go也就應(yīng)運(yùn)而生了。
1、學(xué)習(xí)曲線
它包含了類C語法、GC內(nèi)置和工程工具。這一點(diǎn)非常重要,因?yàn)镚o語言容易學(xué)習(xí),所以一個普通的大學(xué)生花一個星期就能寫出來可以上手的、高性能的應(yīng)用。在國內(nèi)大家都追求快,這也是為什么國內(nèi)Go流行的原因之一。
2、效率
Go擁有接近C的運(yùn)行效率和接近PHP的開發(fā)效率,這就很有利的支撐了上面大家追求快速的需求。
3、出身名門、血統(tǒng)純正
之所以說Go語言出身名門,是因?yàn)槲覀冎繥o語言出自Google公司,這個公司在業(yè)界的知名度和實(shí)力自然不用多說。Google公司聚集了一批牛人,在各種編程語言稱雄爭霸的局面下推出新的編程語言,自然有它的戰(zhàn)略考慮。而且從Go語言的發(fā)展態(tài)勢來看,Google對它這個新的寵兒還是很看重的,Go自然有一個良好的發(fā)展前途。我們看看Go語言的主要創(chuàng)造者,血統(tǒng)純正這點(diǎn)就可見端倪了。
4、組合的思想、無侵入式的接口
Go語言可以說是開發(fā)效率和運(yùn)行效率二者的完美融合,天生的并發(fā)編程支持。Go語言支持當(dāng)前所有的編程范式,包括過程式編程、面向?qū)ο缶幊桃约昂瘮?shù)式編程。
5、強(qiáng)大的標(biāo)準(zhǔn)庫
這包括互聯(lián)網(wǎng)應(yīng)用、系統(tǒng)編程和網(wǎng)絡(luò)編程。Go里面的標(biāo)準(zhǔn)庫基本上已經(jīng)是非常穩(wěn)定,特別是我這里提到的三個,網(wǎng)絡(luò)層、系統(tǒng)層的庫非常實(shí)用。
6、部署方便
我相信這一點(diǎn)是很多人選擇Go的最大理由,因?yàn)椴渴鹛奖?,所以現(xiàn)在也有很多人用Go開發(fā)運(yùn)維程序。
7、簡單的并發(fā)
它包含降低心智的并發(fā)和簡易的數(shù)據(jù)同步,我覺得這是Go最大的特色。之所以寫正確的并發(fā)、容錯和可擴(kuò)展的程序如此之難,是因?yàn)槲覀冇昧隋e誤的工具和錯誤的抽象,Go可以說這一塊做的相當(dāng)簡單。
8、穩(wěn)定性
Go擁有強(qiáng)大的編譯檢查、嚴(yán)格的編碼規(guī)范和完整的軟件生命周期工具,具有很強(qiáng)的穩(wěn)定性,穩(wěn)定壓倒一切。那么為什么Go相比于其他程序會更穩(wěn)定呢?這是因?yàn)镚o提供了軟件生命周期的各個環(huán)節(jié)的工具,如go
tool、gofmt、go test。
rune是Go語言中一種特殊的數(shù)據(jù)類型,它是int32的別名,幾乎在所有方面等同于int32,用于區(qū)分字符值和整數(shù)值,官方解釋如下:
下面我們通過一個例子來看一下:
我們猜測一下結(jié)果,hello5 個字符+1 個空格+3 個漢子,算起來應(yīng)該是 9 個,長度為 9 才對,但是我們執(zhí)行一下,
結(jié)果打印是 15,這是為什么呢?
所以計(jì)算出的長度就等于 5+1+3*3=15
如果我們需要計(jì)算出字符串的長度,而不是底層字節(jié)的個數(shù),那么可以使用下面的方法:
運(yùn)行結(jié)果如下:
在 rune 定義上方還有一個,byte = uint8
1、簡單易學(xué)。
Go語言的作者本身就很懂C語言,所以同樣Go語言也會有C語言的基因,所以對于程序員來說,Go語言天生就會讓人很熟悉,容易上手。
2、并發(fā)性好。
Go語言天生支持并發(fā),可以充分利用多核,輕松地使用并發(fā)。 這是Go語言最大的特點(diǎn)。
描述
Go的語法接近C語言,但對于變量的聲明有所不同。Go支持垃圾回收功能。Go的并行模型是以東尼·霍爾的通信順序進(jìn)程(CSP)為基礎(chǔ),采取類似模型的其他語言包括Occam和Limbo,但它也具有Pi運(yùn)算的特征,比如通道傳輸。
在1.8版本中開放插件(Plugin)的支持,這意味著現(xiàn)在能從Go中動態(tài)加載部分函數(shù)。
與C++相比,Go并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數(shù)等功能,但增加了 切片(Slice) 型、并發(fā)、管道、垃圾回收、接口(Interface)等特性的語言級支持。
摘要: 一、前言 go語言類似Java JUC包也提供了一些列用于多線程之間進(jìn)行同步的措施,比如低級的同步措施有 鎖、CAS、原子變量操作類。相比Java來說go提供了獨(dú)特的基于通道的同步措施。本節(jié)我們先來看看go中CAS操作 二、CAS操作 go中的Cas操作與java中類似,都是借用了CPU提供的原子性指令來實(shí)現(xiàn)。
go語言類似Java JUC包也提供了一些列用于多線程之間進(jìn)行同步的措施,比如低級的同步措施有 鎖、CAS、原子變量操作類。相比Java來說go提供了獨(dú)特的基于通道的同步措施。本節(jié)我們先來看看go中CAS操作
go中的Cas操作與java中類似,都是借用了CPU提供的原子性指令來實(shí)現(xiàn)。CAS操作修改共享變量時候不需要對共享變量加鎖,而是通過類似樂觀鎖的方式進(jìn)行檢查,本質(zhì)還是不斷的占用CPU 資源換取加鎖帶來的開銷(比如上下文切換開銷)。下面一個例子使用CAS來實(shí)現(xiàn)計(jì)數(shù)器
go中CAS操作具有原子性,在解決多線程操作共享變量安全上可以有效的減少使用鎖所帶來的開銷,但是這是使用cpu資源做交換的。
我簡單列舉了并發(fā)編程的大綱,需要詳細(xì)的私信“555”~~
Go語言內(nèi)置的flag包實(shí)現(xiàn)了命令行參數(shù)的解析,flag包使得開發(fā)命令行工具更為簡單。
如果你只是簡單的想要獲取命令行參數(shù),可以像下面的代碼示例一樣使用os.Args來獲取命令行參數(shù)。
將上面的代碼執(zhí)行g(shù)o build -o "args_demo"編譯之后,執(zhí)行:
os.Args是一個存儲命令行參數(shù)的字符串切片,它的第一個元素是執(zhí)行文件的名稱。
本文介紹了flag包的常用函數(shù)和基本用法,更詳細(xì)的內(nèi)容請查看官方文檔。
flag包支持的命令行參數(shù)類型有bool、int、int64、uint、uint64、float float64、string、duration。
有以下兩種常用的定義命令行flag參數(shù)的方法。
基本格式如下:
flag.Type(flag名, 默認(rèn)值, 幫助信息)*Type 例如我們要定義姓名、年齡、婚否三個命令行參數(shù),我們可以按如下方式定義:
需要注意的是,此時name、age、married、delay均為對應(yīng)類型的指針。
基本格式如下: flag.TypeVar(Type指針, flag名, 默認(rèn)值, 幫助信息) 例如我們要定義姓名、年齡、婚否三個命令行參數(shù),我們可以按如下方式定義:
通過以上兩種方法定義好命令行flag參數(shù)后,需要通過調(diào)用flag.Parse()來對命令行參數(shù)進(jìn)行解析。
支持的命令行參數(shù)格式有以下幾種:
其中,布爾類型的參數(shù)必須使用等號的方式指定。
Flag解析在第一個非flag參數(shù)(單個”-“不是flag參數(shù))之前停止,或者在終止符”–“之后停止。
定義
使用
命令行參數(shù)使用提示:
$ ./flag_demo -help
Usage of ./flag_demo:
-age int
年齡 (default 18)
-d duration
時間間隔
-married
婚否
-name string
姓名 (default "張三")
正常使用命令行flag參數(shù):
使用非flag命令行參數(shù):
原文鏈接: