由于歷史的原因,Python的部署工具生態(tài)相當(dāng)混亂【比如setuptools,distutils,pip,buildout的不同適用場(chǎng)合以及兼容性問(wèn)題】。官方PyPI源又經(jīng)常出問(wèn)題,需要搭建私有鏡像,而維護(hù)這個(gè)鏡像又要花費(fèi)不少時(shí)間和精力。并發(fā)性好。
創(chuàng)新互聯(lián)是一家專(zhuān)注于成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)和達(dá)州電信機(jī)房的網(wǎng)絡(luò)公司,有著豐富的建站經(jīng)驗(yàn)和案例。
簡(jiǎn)單易學(xué)。Go語(yǔ)言的作者本身就很懂C語(yǔ)言,所以同樣Go語(yǔ)言也會(huì)有C語(yǔ)言的基因,所以對(duì)于程序員來(lái)說(shuō),Go語(yǔ)言天生就會(huì)讓人很熟悉,容易上手。并發(fā)性好。Go語(yǔ)言天生支持并發(fā),可以充分利用多核,輕松地使用并發(fā)。
內(nèi)置強(qiáng)大的工具,Go語(yǔ)言里面內(nèi)置了很多工具鏈,最好的應(yīng)該是gofmt工具,自動(dòng)化格式化代碼,能夠讓團(tuán)隊(duì)review變得如此的簡(jiǎn)單,代碼格式一模一樣,想不一樣都很困難。
Go就是基因里面支持的并發(fā),可以充分的利用多核,很容易的使用并發(fā)。內(nèi)置runtime,支持垃圾回收,這屬于動(dòng)態(tài)語(yǔ)言的特性之一吧,雖然目前來(lái)說(shuō)GC不算完美,但是足以應(yīng)付我們所能遇到的大多數(shù)情況,特別是Go1之后的GC。
學(xué)習(xí)曲線 它包含了類(lèi)C語(yǔ)法、GC內(nèi)置和工程工具。這一點(diǎn)非常重要,因?yàn)镚o語(yǔ)言容易學(xué)習(xí),所以一個(gè)普通的大學(xué)生花一個(gè)星期就能寫(xiě)出來(lái)可以上手的、高性能的應(yīng)用。在國(guó)內(nèi)大家都追求快,這也是為什么國(guó)內(nèi)Go流行的原因之一。
在golang中,很多方法接收的時(shí)間參數(shù)都是time.Duration類(lèi)型。例如sleep方法,使用 其中 1 * time.Second 的結(jié)果就是time.Duration類(lèi)型。
var 聲明變量, var 變量名 類(lèi)型=值或函數(shù) ,變量名真的可以是中文,再也不怕詞窮不知道起變量名了,當(dāng)然,能用英文是最好的了。
go程序規(guī)范,首行命名這個(gè)文件屬于哪個(gè)包,往下再導(dǎo)入其他包,定義常量,定義全局變量,定義結(jié)構(gòu),定義接口,方法體?;绢?lèi)型:布爾型,bool,只有兩個(gè)值,true和false,長(zhǎng)度為一個(gè)字節(jié),和php不同可以用0和1來(lái)代表。
Go 中不存在引用傳遞,所有的參數(shù)傳遞都是值傳遞,而map是等同于指針類(lèi)型的,所以在把map變量傳遞給函數(shù)時(shí),函數(shù)對(duì)map的修改,也會(huì)實(shí)質(zhì)改變map的值。
函數(shù)作為變量時(shí),它是一個(gè)實(shí)際的函數(shù),具有實(shí)現(xiàn)代碼??梢再x值給變量或者傳遞給其他函數(shù)作為參數(shù),實(shí)現(xiàn)函數(shù)的動(dòng)態(tài)編程。
編譯型語(yǔ)言,編譯器的靜態(tài)求值是自然的。必須使用強(qiáng)制類(lèi)型轉(zhuǎn)換。甚至于對(duì)一個(gè)uint16變量賦uint8的值都是不允許的。整數(shù)字面值不包含存儲(chǔ)空間的大小,可以直接賦給各種uintX(必須不溢出)。
數(shù)組的每個(gè)元素都可以通過(guò)索引下標(biāo)來(lái)訪問(wèn),索引下標(biāo)的范圍是從0開(kāi)始到數(shù)組長(zhǎng)度減1的位置,內(nèi)置函數(shù) len() 可以返回?cái)?shù)組中元素的個(gè)數(shù)。
Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)中提供了sort包對(duì)整型,浮點(diǎn)型,字符串型切片進(jìn)行排序,檢查一個(gè)切片是否排好序,使用二分法搜索函數(shù)在一個(gè)有序切片中搜索一個(gè)元素等功能。
一般來(lái)說(shuō),我們不會(huì)直接使用ASCII碼來(lái)處理,因?yàn)檫@樣不夠直觀。比如你說(shuō)的判定輸入是否是字母,是否是數(shù)字,那么有個(gè)比較直觀的方法來(lái)處理。
開(kāi)門(mén)見(jiàn)山地說(shuō),我當(dāng)初放棄Go語(yǔ)言(golang),就是因?yàn)閮蓚€(gè)“不爽”:第一,對(duì)Go語(yǔ)言本身不爽;第二,對(duì)Go語(yǔ)言社區(qū)里的某些人不爽。毫無(wú)疑問(wèn),這是非常主觀的結(jié)論。但是我有足夠詳實(shí)的客觀的論據(jù),用以支撐這個(gè)看似主觀的結(jié)論。
這個(gè)要說(shuō)到 Go 語(yǔ)言中 string 的底層實(shí)現(xiàn)了,源碼在 src/runtime/string.go里,可以看到 string 其實(shí)包含一個(gè)指向數(shù)據(jù)的指針和一個(gè)長(zhǎng)度字段。注意這里的是否包含指針,包括底層的實(shí)現(xiàn)。
Age: 66,后面這個(gè)都好不能省略 還有一個(gè)點(diǎn),觀察e3的賦值 new返回的是一個(gè)指針。然后指針可以直接點(diǎn)號(hào)賦值。這說(shuō)明go默認(rèn)進(jìn)行了取值操作 eAge 等價(jià)于 (*e3).Age 如上定義了一個(gè)空的結(jié)構(gòu)體Empty。