極客時(shí)間的GO語言進(jìn)階訓(xùn)練營是很不錯(cuò),知識(shí)內(nèi)容涉及比較全面,從編程語言到中間件、系統(tǒng)設(shè)計(jì)再到架構(gòu)都安排了相關(guān)課程,老師們在課程中不講語法和用法,重點(diǎn)傳遞設(shè)計(jì)原理和最佳實(shí)踐,講課的過程中貼合工作場景,分享真實(shí)的干貨案例,啟發(fā)學(xué)員的思維讓其自主進(jìn)行學(xué)習(xí),還幫學(xué)員建立系統(tǒng)大局觀,有助于學(xué)員深層次的提升。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了襄汾免費(fèi)建站歡迎大家使用!
第十名、R語言
R語言,一種自由軟件編程語言與操作環(huán)境,主要用于統(tǒng)計(jì)分析、繪圖、數(shù)據(jù)挖掘。R基于S語言的一個(gè)GNU計(jì)劃項(xiàng)目,所以也可以當(dāng)作S語言的一種實(shí)現(xiàn),通常用S語言編寫的代碼都可以不作修改的在R環(huán)境下運(yùn)行。R的語法是來自Scheme。
提名詞
R語言作者,George Ross Ihaka:在奧克蘭大學(xué)統(tǒng)計(jì)系任副教授,是R語言的最初作者。
2
/10
第九名、Python
頒獎(jiǎng)詞
Python是一種廣泛使用的高級(jí)編程語言,屬于通用型編程語言。作為一種解釋型語言,Python的設(shè)計(jì)哲學(xué)強(qiáng)調(diào)代碼的可讀性和簡潔的語法。相比于C++或Java,Python讓開發(fā)者能夠用更少的代碼表達(dá)想法。不管是小型還是大型程序,該語言都試圖讓程序的結(jié)構(gòu)清晰明了。
提名詞
Python語言作者,Guido van Rossum:生于荷蘭哈勒姆,計(jì)算機(jī)程序員,為Python程序設(shè)計(jì)語言的最初設(shè)計(jì)者及主要架構(gòu)師。
3
/10
第八名、C語言
頒獎(jiǎng)詞
C是一種通用的編程語言,廣泛用于系統(tǒng)軟件與應(yīng)用軟件的開發(fā)。C語言具有高效、靈活、功能豐富、表達(dá)力強(qiáng)和較高的可移植性等特點(diǎn)。C語言編譯器普遍存在于各種不同的操作系統(tǒng)中,例如Microsoft Windows、macOS、Linux、Unix等。C語言的設(shè)計(jì)影響了眾多后來的編程語言,例如C++、Objective-C、Java、C#等。
提名詞
C語言作者,Dennis MacAlistair Ritchie:美國計(jì)算機(jī)科學(xué)家。黑客圈子通常稱他為“dmr”。他是C語言的創(chuàng)造者、Unix操作系統(tǒng)的關(guān)鍵開發(fā)者,對計(jì)算機(jī)領(lǐng)域產(chǎn)生了深遠(yuǎn)影響,并與肯·湯普遜同為1983年圖靈獎(jiǎng)得主。
4
/10
第七名、Go
頒獎(jiǎng)詞
Go(又稱Golang)是Google開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。Go的語法接近C語言,但對于變量的聲明有所不同。Go支持垃圾回收功能。
提名詞
Go語言作者,Robert C. Pike:來自加拿大的程序員,曾經(jīng)加入貝爾實(shí)驗(yàn)室,為 UNIX小組的成員。他與肯·湯普遜共同開發(fā)了UTF-8。目前為 google的工程師,參與編程語言 Go與Sawzall的研發(fā)工作。
5
/10
第六名、JavaScript
頒獎(jiǎng)詞
JavaScript,通??s寫為JS,是一種高級(jí)的,解釋執(zhí)行的編程語言。JavaScript是一門基于原型、函數(shù)先行的語言,是一門多范式的語言,它支持面向?qū)ο缶幊蹋钍骄幊?,以及函?shù)式編程。它已經(jīng)由ECMA(歐洲計(jì)算機(jī)制造商協(xié)會(huì))通過ECMAScript實(shí)現(xiàn)語言的標(biāo)準(zhǔn)化。它被世界上的絕大多數(shù)網(wǎng)站所使用,也被世界主流瀏覽器(Chrome、IE、Firefox、Safari、Opera)支持。
提名詞
JavaScript語言作者,Brendan Eich:美國程序員與企業(yè)家,JavaScript主要?jiǎng)?chuàng)造者與架構(gòu)師,曾任Mozilla公司的首席技術(shù)官,并曾短暫擔(dān)任首席執(zhí)行官。
6
/10
第五名、Objective-C
頒獎(jiǎng)詞
Objective-C是一種通用、高級(jí)、面向?qū)ο蟮木幊陶Z言。它擴(kuò)展了標(biāo)準(zhǔn)的ANSI C編程語言,將Smalltalk式的消息傳遞機(jī)制加入到ANSI C中。目前主要支持的編譯器有GCC和Clang(采用LLVM作為后端)。
提名詞
Objective-C作者,Brad Cox:美國計(jì)算機(jī)科學(xué)家。于傅爾曼大學(xué)主修化學(xué)與數(shù)學(xué),于芝加哥大學(xué)取得數(shù)學(xué)生物學(xué)博士學(xué)位。Objective-C主要作者。
7
/10
第四名、PHP
頒獎(jiǎng)詞
PHP(全稱:PHP:Hypertext Preprocessor,即“PHP:超文本預(yù)處理器”)是開源的通用計(jì)算機(jī)腳本語言,尤其適用于網(wǎng)絡(luò)開發(fā)并可嵌入HTML中使用。PHP的語法借鑒吸收C語言、Java和Perl等流行計(jì)算機(jī)語言的特點(diǎn),易于一般程序員學(xué)習(xí)。PHP的主要目標(biāo)是允許網(wǎng)絡(luò)開發(fā)人員快速編寫動(dòng)態(tài)頁面,但PHP也被用于其他很多領(lǐng)域。
提名詞
PHP語言作者,Rasmus Lerdorf:出生于格陵蘭島凱凱塔蘇瓦克,是一個(gè)丹麥程序員,他擁有加拿大國籍。他也是編程語言PHP的創(chuàng)始人,其中PHP的頭兩個(gè)版本是由他編寫的,后來他也參與PHP后續(xù)版本的開發(fā)。
8
/10
第三名、Java
頒獎(jiǎng)詞
Java是一種廣泛使用的計(jì)算機(jī)編程語言,擁有跨平臺(tái)、面向?qū)ο?、泛型編程的特性,廣泛應(yīng)用于企業(yè)級(jí)Web應(yīng)用開發(fā)和移動(dòng)應(yīng)用開發(fā)。Java編程語言是個(gè)簡單、面向?qū)ο?、分布式、解釋性、健壯、安全與系統(tǒng)無關(guān)、可移植、高性能、多線程和動(dòng)態(tài)的語言。
提名詞
Java語言作者,James Gosling:出生于加拿大,軟件專家,Java編程語言的共同創(chuàng)始人之一,一般公認(rèn)他為“Java之父”。
9
/10
第二名、C++
頒獎(jiǎng)詞
C++是一種使用廣泛的計(jì)算機(jī)程序設(shè)計(jì)語言。它是一種通用程序設(shè)計(jì)語言,支持多重編程模式,例如過程化程序設(shè)計(jì)、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì)和設(shè)計(jì)模式等。
提名詞
C++語言作者,Bjarne Stroustrup:生于丹麥奧胡斯郡,計(jì)算機(jī)科學(xué)家。他以創(chuàng)造C++編程語言而聞名,被稱為“C++之父”。
10
/10
第一名、Visual Basic .NET
頒獎(jiǎng)詞
Visual Basic .NET(VB.NET)是.NET Framework框架下的一種多重編程范式高級(jí)語言。Visual Basic .NET屬Basic系語言,其語法特點(diǎn)是以極具親和力的英文單詞為基礎(chǔ)標(biāo)識(shí),以及與自然語言極其相近的邏輯表達(dá),有時(shí)候你會(huì)覺得寫VB.NET代碼就好像在寫英文句子一樣,從這個(gè)角度來說,VB.NET似乎是最高級(jí)的一門編程語言,當(dāng)然在Basic系語言中VB.NET也確實(shí)是迄今為止最強(qiáng)大的一門編程語言。
提名詞
Visual Basic .NET作者,Alan Cooper:交互設(shè)計(jì)的提倡者。庫珀有些時(shí)候被叫做 Visual Basic 之父,雖然大多數(shù)的工作是由微軟的內(nèi)部開發(fā)團(tuán)隊(duì)完成的,但是對于Windows可視化設(shè)計(jì)工具的創(chuàng)意是來源于庫珀的。
Go 由于不支持泛型而臭名昭著,但最近,泛型已接近成為現(xiàn)實(shí)。Go 團(tuán)隊(duì)實(shí)施了一個(gè)看起來比較穩(wěn)定的設(shè)計(jì)草案,并且正以源到源翻譯器原型的形式獲得關(guān)注。本文講述的是泛型的最新設(shè)計(jì),以及如何自己嘗試泛型。
例子
FIFO Stack
假設(shè)你要?jiǎng)?chuàng)建一個(gè)先進(jìn)先出堆棧。沒有泛型,你可能會(huì)這樣實(shí)現(xiàn):
type?Stack?[]interface{}func?(s?Stack)?Peek()?interface{}?{
return?s[len(s)-1]
}
func?(s?*Stack)?Pop()?{
*s?=?(*s)[:
len(*s)-1]
}
func?(s?*Stack)?Push(value?interface{})?{
*s?=?
append(*s,?value)
}
但是,這里存在一個(gè)問題:每當(dāng)你 Peek 項(xiàng)時(shí),都必須使用類型斷言將其從 interface{} 轉(zhuǎn)換為你需要的類型。如果你的堆棧是 *MyObject 的堆棧,則意味著很多 s.Peek().(*MyObject)這樣的代碼。這不僅讓人眼花繚亂,而且還可能引發(fā)錯(cuò)誤。比如忘記 * 怎么辦?或者如果您輸入錯(cuò)誤的類型怎么辦?s.Push(MyObject{})` 可以順利編譯,而且你可能不會(huì)發(fā)現(xiàn)到自己的錯(cuò)誤,直到它影響到你的整個(gè)服務(wù)為止。
通常,使用 interface{} 是相對危險(xiǎn)的。使用更多受限制的類型總是更安全,因?yàn)榭梢栽诰幾g時(shí)而不是運(yùn)行時(shí)發(fā)現(xiàn)問題。
泛型通過允許類型具有類型參數(shù)來解決此問題:
type?Stack(type?T)?[]Tfunc?(s?Stack(T))?Peek()?T?{
return?s[len(s)-1]
}
func?(s?*Stack(T))?Pop()?{
*s?=?(*s)[:
len(*s)-1]
}
func?(s?*Stack(T))?Push(value?T)?{
*s?=?
append(*s,?value)
}
這會(huì)向 Stack 添加一個(gè)類型參數(shù),從而完全不需要 interface{}?,F(xiàn)在,當(dāng)你使用 Peek() 時(shí),返回的值已經(jīng)是原始類型,并且沒有機(jī)會(huì)返回錯(cuò)誤的值類型。這種方式更安全,更容易使用。(譯注:就是看起來更丑陋,^-^)
此外,泛型代碼通常更易于編譯器優(yōu)化,從而獲得更好的性能(以二進(jìn)制大小為代價(jià))。如果我們對上面的非泛型代碼和泛型代碼進(jìn)行基準(zhǔn)測試,我們可以看到區(qū)別:
type?MyObject?struct?{
X?
int
}
var?sink?MyObjectfunc?BenchmarkGo1(b?*testing.B)?{
for?i?:=?0;?i??b.N;?i++?{
var?s?Stack
s.Push(MyObject{})
s.Push(MyObject{})
s.Pop()
sink?=?s.Peek().(MyObject)
}
}
func?BenchmarkGo2(b?*testing.B)?{
for?i?:=?0;?i??b.N;?i++?{
var?s?Stack(MyObject)
s.Push(MyObject{})
s.Push(MyObject{})
s.Pop()
sink?=?s.Peek()
}
}
結(jié)果:
BenchmarkGo1BenchmarkGo1-16?????12837528?????????87.0?ns/op???????48?B/op????????2?allocs/opBenchmarkGo2BenchmarkGo2-16?????28406479?????????41.9?ns/op???????24?B/op????????2?allocs/op
在這種情況下,我們分配更少的內(nèi)存,同時(shí)泛型的速度是非泛型的兩倍。
合約(Contracts)
上面的堆棧示例適用于任何類型。但是,在許多情況下,你需要編寫僅適用于具有某些特征的類型的代碼。例如,你可能希望堆棧要求類型實(shí)現(xiàn) String() 函數(shù)