欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

go語(yǔ)言和python的區(qū)別是什么

這篇文章將為大家詳細(xì)講解有關(guān)go語(yǔ)言和python的區(qū)別是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

德江網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)2013年至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

go語(yǔ)言和python的區(qū)別:1、接受輸入時(shí)python直接采用input函數(shù),而go語(yǔ)言要一直監(jiān)聽(tīng)Scan();2、發(fā)送網(wǎng)絡(luò)請(qǐng)求python處理比go語(yǔ)言更友好;3、go語(yǔ)言效率比python高;4、go語(yǔ)言打包簡(jiǎn)單。

go語(yǔ)言和python的區(qū)別是什么

背景

工作中的主力語(yǔ)言是Python,今年要搞性能測(cè)試的工具,由于GIL鎖的原因,Python的性能實(shí)在是慘淡,需要學(xué)一門(mén)性能高的語(yǔ)言來(lái)生成性能測(cè)試的壓力端。因此我把目光放在了現(xiàn)在的新秀Go。經(jīng)過(guò)一段時(shí)間的學(xué)習(xí),也寫(xiě)了一個(gè)小工具,記一下這兩個(gè)語(yǔ)言的區(qū)別。

需求

工具是一個(gè)小爬蟲(chóng),用來(lái)爬某網(wǎng)站的某個(gè)產(chǎn)品的迭代記錄,實(shí)現(xiàn)邏輯就是運(yùn)行腳本后,使用者從命令行輸入某些元素(產(chǎn)品ID等)后,腳本導(dǎo)出一個(gè)Excel文件出來(lái)。

最初的版本是用Python寫(xiě)的,30行代碼不到就搞定了。這次用Go重寫(xiě),代碼量在110行左右。

接受輸入

第一步就是接受命令行的輸入內(nèi)容,工具要給非技術(shù)人員用的,弄一個(gè)CLI不太合適,要的效果就是一行一行的輸入內(nèi)容,用Python實(shí)現(xiàn)起來(lái)非常容易,像這樣:

app_id = raw_input('請(qǐng)輸入app_id: ')
app_analysis = raw_input('請(qǐng)輸入analysis: ')

執(zhí)行后就是一行一行的往下走,但是用Go就有點(diǎn)蛋疼了,完整的代碼如下:

func getPara() (string, string) {
    var i = 0
    var appId, analysis string
    fmt.Print("請(qǐng)輸入appId:")
    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan() {
        text := scanner.Text()
        if i == 0 {
            appId = text
            fmt.Print("請(qǐng)輸入analysis:")
        } else if i == 1 {
            analysis = text
            fmt.Print("程序初始化數(shù)據(jù)完畢。。。。請(qǐng)按任意鍵繼續(xù)")
        } else {
            break
        }
        i++
    }
    return appId, analysis
}

Go要實(shí)現(xiàn)CLI很方便,但是涉及到這種一行一行的輸入,要一直監(jiān)聽(tīng)Scan(),所以就有了上面蛋疼的循環(huán)處理,而且在必須要先打印信息,再來(lái)監(jiān)聽(tīng)內(nèi)容,總體的寫(xiě)的過(guò)程很惡心,也許是沒(méi)有找到更好的方法吧,實(shí)在是太逆天了。

發(fā)送請(qǐng)求

在發(fā)送請(qǐng)求方便,兩種語(yǔ)言倒是差別不太大,至少我寫(xiě)的Get請(qǐng)求是這樣的。

Python
params = { 
   "analysis": app_analysis,
   "appid": app_id,
   "country": 'cn'
   }
r = requests.get(url, params)
Go
q := req.URL.Query()
q.Add("appid", appId)
q.Add("analysis", analysis)
q.Add("country", "cn")
req.URL.RawQuery = q.Encode()
var resp *http.Response
resp, _ = http.DefaultClient.Do(req)

返回結(jié)果處理

在返回結(jié)果的處理上,Python的處理方式簡(jiǎn)直是太友好了,直接調(diào)用json就處理了。

result = r.json()

但是Go就有點(diǎn)蛋疼了,由于是靜態(tài)語(yǔ)言,所以解包數(shù)據(jù)的時(shí)候需要先定義數(shù)據(jù)格式,比如返回的內(nèi)容必須要先做如下的結(jié)構(gòu)定義:

type ResultInfo struct {
    Code    int
    Msg     string
    Version []VersionInfo
}

type VersionInfo struct {
    Version    string `json:"version"`
    ReleaseTime string `json:"release_time"`
    ReleaseNote string `json:"release_note"`
    AppName   string `json:"app_name"`
    SubTitle   string `json:"subtitle"`
}

第一個(gè)ResultInfo是返回的數(shù)據(jù),其中的Version也是一個(gè)數(shù)組對(duì)象,所以還要再定義一個(gè)數(shù)組對(duì)象,這樣才能調(diào)用方法來(lái)解包處理。

body, _ := ioutil.ReadAll(resp.Body)
var rst = ResultInfo{}
if err := json.Unmarshal(body, &rst); err != nil {
    fmt.Println(err)
}

寫(xiě)數(shù)據(jù)到Excel

這部分調(diào)用的都是第三方庫(kù),所以沒(méi)什么可比性,代碼的實(shí)現(xiàn)完全依賴(lài)于第三方包。

無(wú)所不在的err != nil

Go的異常捕獲機(jī)制跟Python或者Java都不一樣,Python的異常捕獲使用的是try,except來(lái)包裹代碼塊,而Go用的是一個(gè)error對(duì)象,所以所有的Go代碼都會(huì)充斥著大量的

if err != nil {
        return nil, err
    }

這種鬼東西,這種異常機(jī)制在閱讀代碼的時(shí)候,非常惡心,極大的影響了閱讀體驗(yàn)。

吐槽完后

基本上從書(shū)寫(xiě)代碼的過(guò)程來(lái)看,Python的編碼效率比Go高出了很多很多,Go號(hào)稱(chēng)語(yǔ)法靈活,可以極大的提高編碼效率,實(shí)際上并沒(méi)有,受限于靜態(tài)語(yǔ)言,相比于Python這種動(dòng)態(tài)語(yǔ)言來(lái)說(shuō),編碼效率的差距還是非常大的。只能說(shuō)比其他靜態(tài)語(yǔ)言編碼效率高。

但是?。。?/p>

Go的效率比Python高了太多。舉個(gè)例子,有一個(gè)計(jì)算斐波那契數(shù)的算法,Go的實(shí)現(xiàn)如下:
func main() {
    const n = 40
    starttime := time.Now()
    fibN := fib(n)
    endtime := time.Now()
    cost_time := endtime.Sub(starttime)
    fmt.Println(cost_time)
    fmt.Printf("\rFibonacci(%d) = %d\n", n, fibN)
}
func fib(x int) int {
    if x < 2 {
        return x
    }
    return fib(x-1) + fib(x-2)
}

很簡(jiǎn)單的一個(gè)遞歸,當(dāng)N為40的時(shí)候,Go花了大概1秒左右的時(shí)間,執(zhí)行結(jié)果如下:

876.838ms(消耗時(shí)間)
Fibonacci(40) = 102334155

我們換成Python

def fib(x):
    if x<2:
        return x
    return fib(x-1)+fib(x-2)
if __name__ == '__main__':
    import time
    begin = time.time()
    print fib(40)
    end = time.time()
    print end-begin

一樣的執(zhí)行邏輯,執(zhí)行的結(jié)果卻是:

102334155
52.8657081127(消耗時(shí)間)

WTF!!! 用Go來(lái)處理效率是Python的50倍以上。

還沒(méi)完,工具寫(xiě)完了總是要給人用的吧,Python寫(xiě)完之后,如果給一個(gè)非技術(shù)人員使用,那么。。。

使用者:要怎么用?
我:你裝一下Python,然后配好環(huán)境變量,順便把requests庫(kù)和xlwt庫(kù)也裝一下。
我:要裝這兩個(gè)庫(kù)你要先裝一下pip。
使用者:黑人問(wèn)號(hào)臉?。。。?!

如果你用Go來(lái)寫(xiě),打包完發(fā)過(guò)去就行了

使用者:要怎么用?
我:你雙擊一下,讓你輸入什么就輸入什么

如果使用者是用Windows系統(tǒng),那也沒(méi)問(wèn)題,

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build xxx.go

直接打包成exe文件

關(guān)于go語(yǔ)言和python的區(qū)別是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享標(biāo)題:go語(yǔ)言和python的區(qū)別是什么
分享網(wǎng)址:http://aaarwkj.com/article22/jjjpjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)ChatGPT、用戶(hù)體驗(yàn)、小程序開(kāi)發(fā)、軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
激情五月天色婷婷久久| av熟女乱一区二区三区| 久草热不卡的av在线| 91九色国产原创在线观看| 久久五月精品综网中文字幕| 亚洲av成人av天堂| 亚洲欧美日韩国产一区二区三区| 久久国产欧美日韩精品免费| 久久99热最新地址获取| 91成人伦理在线观看| 激情综合色综合久久丁香| 啄木乌法国一区二区三区| 亚洲熟女午夜毛片av毛片| 亚洲国产视频不卡一区| 黄片小视频在线免费播放| 欧美亚洲一区二区三区精品| 日本中文字幕女优观看| 欧美亚洲午夜精品久久久| 国产亚洲一线二线三线| 欧美日韩国产精品一区二区三区 | 91亚洲国产成人精品性色| 欧美口爆吞精在线观看| 亚洲一区二区三区在线观看呢| 国产一区二区三区高潮爽| 日韩欧美人妻中文字幕| 久久亚洲中文字幕乱码| 日本久久91跳蛋视频| 91麻豆精品国产自产| 国产夫妻自拍在线视频| 亚洲国产偷拍在线观看| 国产三级精品电影久久| 久久精品亚洲夜色国产av| 日韩欧美中文字幕一区二区| 日本av一区二区在线| 日韩中文字幕欧美国产| 美女视频黄的日本的日进去了| 亚洲欧美半夜激情一区二区| 国产一级二级三级亚洲| 日日干天天日夜夜操| 97国产成人精品视频免费| 熟妇高潮一区二区三区|