<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      你知道Golang源碼各目錄的作用嗎?

      我是平也,這有一個專注Gopher技術(shù)與成長的開源項目「go home」

      導(dǎo)讀

      學(xué)習(xí)Go語言源碼的第一步就是了解先了解它的目錄結(jié)構(gòu),你對它的源碼目錄了解多少呢?

      目錄總覽

      .
      ├── AUTHORS
      ├── CONTRIBUTING.md
      ├── CONTRIBUTORS
      ├── LICENSE
      ├── PATENTS
      ├── README.boringcrypto.md
      ├── README.md
      ├── SECURITY.md
      ├── api
      ├── doc
      ├── favicon.ico
      ├── lib
      ├── misc
      ├── robots.txt
      ├── src
      └── test
      
      6 directories, 10 files
      
      • AUTHORS:Golang官方作者清單
      • CONTRIBUTING.md:加入貢獻(xiàn)者隊列的指導(dǎo)文件
      • CONTRIBUTORS:第三方貢獻(xiàn)者清單
      • LICENSE:授權(quán)協(xié)議
      • PATENTS:專利
      • README.boringcrypto.md:因為Golang是Google發(fā)布的,這是針對Google內(nèi)部研究分支的說明
      • README.md:說明文件,大家都明白,每個開源庫都有
      • SECURITY.md:安全政策
      • api:Golang每個版本的功能列表歸檔文件,下面有具體介紹
      • doc:Golang文檔說明,和官方文檔相同,可以離線查看
      • favicon.ico:瀏覽器頁簽左邊的圖標(biāo),一般放在網(wǎng)站根目錄,就長這樣
        file
      • lib:看起來像是庫文檔模板,里面列舉了time包的說明
      • misc:匯集了Go語言相關(guān)的IDE、插件、cgo測試程序、示例等亂七八糟的東西
      • robots.txt:主要用來控制各大搜索引擎爬蟲的爬取規(guī)則
      • src:Golang核心實現(xiàn)都在這里,下面詳細(xì)講述
      • test:Golang單元測試程序,通過查看測試程序可以學(xué)習(xí)到golang的用法和特性

      目錄延伸

      api

      該目錄中的每個文件都是Go語言API列表,每行一個,方便IDE使用。

      .
      ├── README
      ├── except.txt
      ├── go1.1.txt
      ├── go1.10.txt
      ├── go1.11.txt
      ├── go1.12.txt
      ├── go1.13.txt
      ├── go1.14.txt
      ├── go1.2.txt
      ├── go1.3.txt
      ├── go1.4.txt
      ├── go1.5.txt
      ├── go1.6.txt
      ├── go1.7.txt
      ├── go1.8.txt
      ├── go1.9.txt
      ├── go1.txt
      └── next.txt
      
      0 directories, 18 files
      
      • README:說明文件,里面有對該目錄下文件作用的說明
      • except.txt:列舉了接下來可能會廢棄的API,但是并不影響兼容問題
      • go*.txt:囊括了每個版本的API列表,文件內(nèi)容只增不減,版本發(fā)布后就歸檔不再改動
      • next.txt:列舉了未來的版本可能實現(xiàn)的新功能

      src

      archive

      歸檔文件處理庫,可以用來處理tar與zip類型文件。

      bufio

      主要用于文本的讀取寫入,對io.Reader和io.Writer進(jìn)行了實現(xiàn)和封裝,提供了比較便利的方法操作文件。

      builtin

      定義了常用了內(nèi)置類型、函數(shù)和接口,比如make、new、len、error等。

      bytes

      定義了用來操作字節(jié)的函數(shù)。

      cmd

      提供了Go語言的基本工具,比如我們常用的代碼格式化工具gofmt、靜態(tài)檢查工具vet等。

      .
      ├── README.vendor
      ├── addr2line
      ├── api
      ├── asm
      ├── buildid
      ├── cgo
      ├── compile
      ├── cover
      ├── dist
      ├── doc
      ├── fix
      ├── go
      ├── go.mod
      ├── go.sum
      ├── gofmt
      ├── internal
      ├── link
      ├── nm
      ├── objdump
      ├── pack
      ├── pprof
      ├── test2json
      ├── trace
      ├── vendor
      └── vet
      
      22 directories, 3 files
      

      下面列舉出幾個比較常用的工具:

      • addr2line:因為linux上才支持這個命令,所以這里做了一個模擬器,用來支持pprof的
      • objdump:跟addr2line作用一樣,這是linux中該命令的模擬實現(xiàn),用來支持pprof
      • api:用于生成Go語言API列表,也就是上面提到的api目錄下的go*.txt文件
      • asm:匯編器,將源文件匯編為目標(biāo)文件
      • buildid:用來更新庫或二進(jìn)制文件中構(gòu)建的標(biāo)識
      • cgo:支持創(chuàng)建調(diào)用C代碼的包
      • compile:編譯工具
      • go:我們經(jīng)常用的go命令,管理源代碼工具
      • godoc:用于提取并生成Go程序文檔
      • gofmt:代碼格式化工具
      • pack:備份壓縮工具,是unix系統(tǒng)中ar工具的簡單實現(xiàn),它可以將多個文件打包為一個備存文件
      • link:連接器
      • vet:代碼靜態(tài)檢查工具
      • dist:是一個引導(dǎo)程序,負(fù)責(zé)構(gòu)建Go語言的其他工具
      • fix:用來找到使用舊API的程序,然后更新為新的API
      • cover:用來分析單元測試覆蓋率的工具
      • inernal:一些內(nèi)部通用實現(xiàn),被其他包調(diào)用
      • nm:列出了由目標(biāo)文件,歸檔文件或可執(zhí)行文件定義或使用的符號
      • pprof:Go程序的性能分析工具
      • vendor:Go語言包依賴工具
      • test2json:將Go測試程序的輸出轉(zhuǎn)換為機(jī)器可讀的JSON流
      • trace:用來跟蹤分析goroutines運(yùn)行調(diào)度狀態(tài)等功能的工具,比pprof更加細(xì)粒度

      compress

      壓縮、解壓工具,支持bzip2、flate、gzip、lzw、zlib等格式。

      container

      提供了雙向鏈表(list)、堆(heap)、環(huán)形聯(lián)表(ring)的數(shù)據(jù)結(jié)構(gòu)的操作。

      context

      通常在goroutine切換執(zhí)行時,需要知道相關(guān)狀態(tài)信息才能執(zhí)行,而這些信息就被封裝在context中,它的使用在Go語言中十分廣泛。

      crypto

      封裝了很多加解密算法,比如rsa、sha1、aes、md5等函數(shù)。

      database

      提供了各種數(shù)據(jù)庫的通用API,比如SQLite、MySQL、Postgres。

      debug

      支持Go程序調(diào)試。

      encoding

      封裝了各類編碼的實現(xiàn),比如base64、json、xml、hex等。

      .
      ├── ascii85
      ├── asn1
      ├── base32
      ├── base64
      ├── binary
      ├── csv
      ├── encoding.go
      ├── gob
      ├── hex
      ├── json
      ├── pem
      └── xml
      
      11 directories, 1 file
      

      errors

      是我們經(jīng)常使用的錯誤函數(shù),也可以自定義。

      expvar

      提供了一系列標(biāo)準(zhǔn)接口,可以通過HTTP的方式將服務(wù)器的變量以JSON格式打印出來。

      flag

      解析處理命令行參數(shù)的工具。

      fmt

      封裝了各種格式化輸出方法。

      go

      hash

      封裝了crc32、crc64在內(nèi)的哈希函數(shù)。

      html

      HTML模板引擎,可以將代碼與HTML混合在一起,它會負(fù)責(zé)解析轉(zhuǎn)義,類似python的jinja、php的smarty等。

      image

      一般語言都會有的圖像處理庫。

      index

      用來實現(xiàn)字符串高速匹配查找。

      internal

      internal專門用來控制包導(dǎo)入權(quán)限的,以internal命名的包只允許它父級和父級的子級目錄導(dǎo)入。

      .
      |-- checker
      |   |-- internal
      |   |   |-- cpu
      |   |   |   `-- cpu.go
      |   |   `-- ram
      |   |       `-- ram.go
      |   `-- server.go
      |-- go.mod
      |-- go.sum
      `-- main.go
      

      如上代碼,checker/internal/cpu和checker/internal/ram只能被checker包及其子包中的代碼導(dǎo)入,不能被main.go導(dǎo)入,否則會報錯。

      io

      為文件I/O提供了一些基本的接口,bufio就對它進(jìn)行了實現(xiàn)。

      log

      封裝了日志記錄方法,比如log.Fatal、log.Print等。

      math

      封裝了基本的數(shù)學(xué)相關(guān)的函數(shù)。

      mime

      封裝了MIME類型的解析,MIME是媒體類型,比如文檔、文件、字節(jié)流性質(zhì)的格式。

      net

      封裝了各種網(wǎng)絡(luò)IO的函數(shù),比如TCP、UDP、Socket等。

      os

      封裝了用來操作操作系統(tǒng)的命令,比如調(diào)用exec可以執(zhí)行shell腳本等,當(dāng)然它支持不同平臺的操作。

      path

      實現(xiàn)了用于處理斜杠分隔符路徑的函數(shù)。

      plugin

      Go1.8版本以后提供的插件機(jī)制,可以動態(tài)地加載動態(tài)鏈接庫文件.so,這樣對外發(fā)布動態(tài)鏈接庫就不需要把源碼給到對方進(jìn)行編譯了。

      reflect

      封裝反射讀取方法,比如讀取結(jié)構(gòu)體的方法、屬性等。

      regexp

      封裝了正則表達(dá)式的實現(xiàn)。

      runtime

      包含了Go運(yùn)行時的操作,這塊水很深,這里目前不再展開陳述。

      sort

      封裝了部分排序算法。

      strconv

      封裝了基礎(chǔ)類型與字符串互相轉(zhuǎn)換的方法,比如int轉(zhuǎn)string,反之亦然。

      strings

      封裝了字符串操作的相關(guān)方法。

      sync

      封裝了基本的同步機(jī)制,各種鎖的實現(xiàn)。

      syscall

      封裝了一系列系統(tǒng)調(diào)用的接口。

      testing

      為Go語言測試程序提供支持。

      text

      封裝了文本處理相關(guān)的方法,比如文本掃描或文本標(biāo)簽過濾器等。

      time

      封裝了時間處理相關(guān)的函數(shù),比如獲取當(dāng)前時間,計算時間差等。

      unicode

      封裝了utf8、utf16的編解碼方法。

      unsafe

      用于一些不安全的操作場景,比如正常情況下,指向不同類型數(shù)據(jù)的指針是無法互相轉(zhuǎn)換的,但是就可以用unsafe的Pointer方法來實現(xiàn),所以應(yīng)該要謹(jǐn)慎使用。


      感謝大家的觀看,如果覺得文章對你有所幫助,歡迎關(guān)注公眾號「平也」,聚焦Go語言與技術(shù)原理。
      關(guān)注我

      posted @ 2020-04-16 20:24  MARIOOW  閱讀(2053)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 在线观看中文字幕国产码| 中文字幕精品亚洲人成在线 | 日韩理伦片一区二区三区| 日韩成人午夜精品久久高潮 | 啦啦啦视频在线日韩精品| 激情国产一区二区三区四| 欧美人与zoxxxx另类| 亚洲理论在线A中文字幕| 中文字幕亚洲综合久久| 亚洲 制服 丝袜 无码| 亚洲国产精品无码久久久| 亚洲精品综合第一国产综合| 久久亚洲国产欧洲精品一| 国产一区二区三区小说| 99亚洲男女激情在线观看| 国产精品一区二区三区日韩| 中文字幕国产精品资源| 久久中文字幕无码专区| 东京热人妻中文无码| 国产国拍亚洲精品永久软件| 久久综合综合久久综合| 国产亚洲精品一区二区无| 永久黄网站色视频免费直播| 4hu四虎永久免费地址ww416| 精品人妻伦九区久久69| 国色天香成人一区二区| 中文字幕天天躁日日躁狠狠躁免费| 国产超碰人人做人人爰| 色吊丝一区二区中文字幕| 欧美牲交a欧美牲交aⅴ免费真| 久久91精品牛牛| 四虎国产精品成人免费久久| 色欲狠狠躁天天躁无码中文字幕 | 国产男女黄视频在线观看| 国产精品先锋资源站先锋影院| 亚洲日本欧美日韩中文字幕| 成在人线av无码免费看网站直播| 久久99热只有频精品6狠狠| 国模雨珍浓密毛大尺度150p| 国产情侣激情在线对白| 99久久久国产精品消防器材|