go語言archive Go語言圣經(jīng)

gohttpserver apk識(shí)別成zip

PK文件其實(shí)是zip格式,但后綴名被修改為apk,通過UnZip解壓后,可以看到Dex文件,Dex是DalvikVMexecutes的全稱,即AndroidDalvik執(zhí)行程序,并非JavaME的字節(jié)碼而是Dalvik字節(jié)碼。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、成都做網(wǎng)站與策劃設(shè)計(jì),和龍網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:和龍等地區(qū)。和龍做網(wǎng)站價(jià)格咨詢:18980820575

由于APK文件本身就是壓縮包,如果用戶的電腦上裝了WinRAR(85%的裝機(jī)量),用IE下載APK文件,擴(kuò)展名就會(huì)被自動(dòng)改為“.zip”。

如果你的下載服務(wù)器為Nginx服務(wù)器,那么,在Nginx安裝目錄下的conf/mime.types文件的對(duì)應(yīng)位置,加上以下一行語句,指定APK文件的MIME類型為application/vnd.android.package-archive即可:

注意:上面的配置只是在nginx那層好了,但如果你是用nginx+tomcat的方式,在ie下還是會(huì)變成zip的還需要在tomcat里面配置conf/web.xml里指定了apk類型

一個(gè)TCP服務(wù)端可以同時(shí)連接很多個(gè)客戶端,例如世界各地的用戶使用自己電腦上的瀏覽器訪問淘寶網(wǎng)。因?yàn)镚o語言中創(chuàng)建多個(gè)goroutine實(shí)現(xiàn)并發(fā)非常方便和高效,所以我們可以每建立一次鏈接就創(chuàng)建一個(gè)goroutine去處理。

為什么要使用 Go 語言?Go 語言的優(yōu)勢(shì)在哪里?

1、簡單易學(xué)。

Go語言的作者本身就很懂C語言,所以同樣Go語言也會(huì)有C語言的基因,所以對(duì)于程序員來說,Go語言天生就會(huì)讓人很熟悉,容易上手。

2、并發(fā)性好。

Go語言天生支持并發(fā),可以充分利用多核,輕松地使用并發(fā)。 這是Go語言最大的特點(diǎn)。

描述

Go的語法接近C語言,但對(duì)于變量的聲明有所不同。Go支持垃圾回收功能。Go的并行模型是以東尼·霍爾的通信順序進(jìn)程(CSP)為基礎(chǔ),采取類似模型的其他語言包括Occam和Limbo,但它也具有Pi運(yùn)算的特征,比如通道傳輸。

在1.8版本中開放插件(Plugin)的支持,這意味著現(xiàn)在能從Go中動(dòng)態(tài)加載部分函數(shù)。

與C++相比,Go并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數(shù)等功能,但增加了 切片(Slice) 型、并發(fā)、管道、垃圾回收、接口(Interface)等特性的語言級(jí)支持。

為什么要使用 Go 語言?Go 語言的優(yōu)勢(shì)在哪里

1. 保留但大幅度簡化指針

Go語言保留著C中值和指針的區(qū)別,但是對(duì)于指針繁瑣用法進(jìn)行了大量的簡化,引入引用的概念。所以在Go語言中,你幾乎不用擔(dān)心會(huì)因?yàn)橹苯硬僮鲀?nèi)寸而引起各式各樣的錯(cuò)誤。

2. 多參數(shù)返回

還記得在C里面為了回饋多個(gè)參數(shù),不得不開辟幾段指針傳到目標(biāo)函數(shù)中讓其操作么?在Go里面這是完全不必要的。而且多參數(shù)的支持讓Go無需使用繁瑣的exceptions體系,一個(gè)函數(shù)可以返回期待的返回值加上error,調(diào)用函數(shù)后立刻處理錯(cuò)誤信息,清晰明了。

3. Array,slice,map等內(nèi)置基本數(shù)據(jù)結(jié)構(gòu)

如果你習(xí)慣了Python中簡潔的list和dict操作,在Go語言中,你不會(huì)感到孤單。一切都是那么熟悉,而且更加高效。如果你是C++程序員,你會(huì)發(fā)現(xiàn)你又找到了STL的vector 和 map這對(duì)朋友。

4. Interface

Go語言最讓人贊嘆不易的特性,就是interface的設(shè)計(jì)。任何數(shù)據(jù)結(jié)構(gòu),只要實(shí)現(xiàn)了interface所定義的函數(shù),自動(dòng)就implement了這個(gè)interface,沒有像Java那樣冗長的class申明,提供了靈活太多的設(shè)計(jì)度和OO抽象度,讓你的代碼也非常干凈。千萬不要以為你習(xí)慣了Java那種一條一條加implements的方式,感覺還行,等接口的設(shè)計(jì)越來越復(fù)雜的時(shí)候,無數(shù)Bug正在后面等著你。

同時(shí),正因?yàn)槿绱?,Go語言的interface可以用來表示任何generic的東西,比如一個(gè)空的interface,可以是string可以是int,可以是任何數(shù)據(jù)類型,因?yàn)檫@些數(shù)據(jù)類型都不需要實(shí)現(xiàn)任何函數(shù),自然就滿足空interface的定義了。加上Go語言的type assertion,可以提供一般動(dòng)態(tài)語言才有的duck typing特性, 而仍然能在compile中捕捉明顯的錯(cuò)誤。

5. OO

Go語言本質(zhì)上不是面向?qū)ο笳Z言,它還是過程化的。但是,在Go語言中, 你可以很輕易的做大部分你在別的OO語言中能做的事,用更簡單清晰的邏輯。是的,在這里,不需要class,仍然可以繼承,仍然可以多態(tài),但是速度卻快得多。因?yàn)楸举|(zhì)上,OO在Go語言中,就是普通的struct操作。

6. Goroutine

這個(gè)幾乎算是Go語言的招牌特性之一了,我也不想多提。如果你完全不了解Goroutine,那么你只需要知道,這玩意是超級(jí)輕量級(jí)的類似線程的東西,但通過它,你不需要復(fù)雜的線程操作鎖操作,不需要care調(diào)度,就能玩轉(zhuǎn)基本的并行程序。在Go語言里,觸發(fā)一個(gè)routine和erlang spawn一樣簡單?;旧弦莆誈o語言,以Goroutine和channel為核心的內(nèi)存模型是必須要懂的。不過請(qǐng)放心,真的非常簡單。

7. 更多現(xiàn)代的特性

和C比較,Go語言完全就是一門現(xiàn)代化語言,原生支持的Unicode, garbage collection, Closures(是的,和functional programming language類似), function是first class object,等等等等。

看到這里,你可能會(huì)發(fā)現(xiàn),我用了很多輕易,簡單,快速之類的形容詞來形容Go語言的特點(diǎn)。我想說的是,一點(diǎn)都不夸張,連Go語言的入門學(xué)習(xí)到提高,都比別的語言門檻低太多太多。在大部分人都有C的背景的時(shí)代,對(duì)于Go語言,從入門到能夠上手做項(xiàng)目,最多不過半個(gè)月。Go語言給人的感覺就是太直接了,什么都直接,讀源代碼直接,寫自己的代碼也直接。

開始讀 Go 源碼了

學(xué)完 Go 的基礎(chǔ)知識(shí)已經(jīng)有一段時(shí)間了,那么接下來應(yīng)該學(xué)什么呢?有幾個(gè)方向可以考慮,比如說 Web 開發(fā),網(wǎng)絡(luò)編程等。

在下一階段的學(xué)習(xí)之前,寫了一個(gè)開源項(xiàng)目 Go 開發(fā)的一款分布式唯一 ID 生成系統(tǒng),如果你對(duì)這個(gè)項(xiàng)目感興趣的話,可以在 GitHub 上拿到源碼。

在寫項(xiàng)目的過程中,發(fā)現(xiàn)一個(gè)問題。實(shí)現(xiàn)功能是沒問題的,但不知道自己寫的代碼是不是符合 Go 的風(fēng)格,是不是夠優(yōu)雅。所以我覺得相比于繼續(xù)學(xué)習(xí)應(yīng)用開發(fā),不如向底層前進(jìn),打好基礎(chǔ),打好寫 Go 代碼的基礎(chǔ)。

所以,我決定開始讀 Go 標(biāo)準(zhǔn)庫源碼,Go 一共有 150+ 標(biāo)準(zhǔn)庫,想要全部讀完的話不是不可能,但絕對(duì)是一項(xiàng)大工程,希望自己能堅(jiān)持下去。

為什么從 Go 標(biāo)準(zhǔn)庫的源碼開始讀呢?因?yàn)樽罱部戳艘恍?Go 底層原理的書,說實(shí)話,像 goroutine 調(diào)度,gc 垃圾回收這些內(nèi)容,根本就看不懂。這要是一上來就讀這部分代碼,恐怕直接就放棄 Go 語言學(xué)習(xí)了。

而標(biāo)準(zhǔn)庫就不一樣了,有一部分代碼根本不涉及底層原理,實(shí)現(xiàn)也相對(duì)簡單,同時(shí)又能對(duì) Go 的理念加深理解,作為入門再好不過了。然后再由簡入深,循序漸進(jìn),就像打怪升級(jí)一樣,一步一步征服 Go。

說了這么多,那到底應(yīng)該怎么讀呢?我想到了一些方法:

可以通過上面的一種或幾種方法相結(jié)合,然后再不斷閱讀不斷總結(jié),最終找到一個(gè)完全適合自己的方法。

下面是我總結(jié)的一些標(biāo)準(zhǔn)庫及功能介紹:

這里僅僅列舉了一部分標(biāo)準(zhǔn)庫,更全面的標(biāo)準(zhǔn)庫列表大家可以直接看官網(wǎng)。

那么問題來了,這么多庫從何下手呢?

我這里做一個(gè)簡單的分類,由于水平有限,只能做一些簡單的梳理,然后大家可以結(jié)合自己的實(shí)際情況來做選擇。

有些庫涉及到非常專業(yè)的知識(shí),投入產(chǎn)出比可能會(huì)比較低。比如 archive 、 compress 以及 crypto ,涉及到壓縮算法以及加密算法的知識(shí)。

有些庫屬于工具類,比如 bufio 、 bytes 、 strings 、 path 、 strconv 等,這些庫不涉及領(lǐng)域知識(shí),閱讀起來比較容易。

有些庫屬于與操作系統(tǒng)打交道的,比如 os , net 、 sync 等,學(xué)習(xí)這些庫需要對(duì)操作系統(tǒng)有明確的認(rèn)識(shí)。

net 下的很多子包與網(wǎng)絡(luò)協(xié)議相關(guān),比如 net/http ,涉及 http 報(bào)文的解析,需要對(duì)網(wǎng)絡(luò)協(xié)議比較了解。

如果想要深入了解語言的底層原理,則需要閱讀 runtime 庫。

要想快速入門,并且了解語言的設(shè)計(jì)理念,建議閱讀 io 以及 fmt 庫,閱讀后會(huì)對(duì)接口的設(shè)計(jì)理解更深。

我已經(jīng)看了一些源碼,雖然過程痛苦,但確實(shí)非常有用。前期可能理解起來比較困難,用的時(shí)間長一些,但形成固定套路之后,會(huì)越來越熟悉,用的時(shí)間也會(huì)更少,理解也會(huì)更深刻。

開源項(xiàng)目:

網(wǎng)頁標(biāo)題:go語言archive Go語言圣經(jīng)
標(biāo)題網(wǎng)址:http://muchs.cn/article4/hheeie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)、定制開發(fā)、小程序開發(fā)、外貿(mào)建站

廣告

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

營銷型網(wǎng)站建設(shè)