[Go語言]從Docker源碼學習Go

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Docker在最近很火,而作為Docker的開發語言-Go也再次被大家提到。

已經使用Docker一段時間了,但是對於源碼,尤其是其開發語言Go卻一直是一知半解。

最近準備利用空餘時間從Docker原始碼入手來學習一下Go,同時對Docker的實現也希望可以提高一個層次。

有興趣的可以一起討論,學習。

 

準備工作:

1. Docker原始碼https://github.com/docker/docker (版本1.1.2)

2. 安裝開發工具LiteIDE, 這個是官方的Go語言的IDE

3. Go語言的官網http://golang.org/ (現在這個已經被牆了,如果想訪問的話,可以通過vpn或者goagent來實現,網上可以搜到很多關於goagent的配置,這就不細說了)

 

Docker命令

Docker pull xxx  //下載image的命令。

 

對應的go檔案

docker/graph/pull.go

 

講解代碼

import (    ...    "github.com/docker/docker/engine"    ...)func (s *TagStore) CmdPull(job *engine.Job) engine.Status {

 

(s *TagStore)  這個的意思是說對類型TagStore定義一個方法,名稱為CmdPull

job *engine.Job  是方法的輸入參數,類型為engine.Job

engine.Status  是方法的返回參數,類型為engine.Status

 

上面設計到3種類型,但是TagStore直接使用,而Job和Status通過engine.的方式來獲得,為什麼呢?

因為TagStore和當前的方法處於同一package下,都是package graph

而Job和Status處於package engine下(docker/engine/job.go),所以帶有包名,而且需要通過import引入對應的檔案

 

TagStore這個結構的定義(docker/graph/tags.go)

type TagStore struct {    path         string    graph        *Graph    Repositories map[string]Repository    sync.Mutex    // FIXME: move push/pull-related fields    // to a helper type    pullingPool map[string]chan struct{}    pushingPool map[string]chan struct{}}

定義一個類型名為TagStore的結構。

    store := &TagStore{        path:         abspath,        graph:        graph,        Repositories: make(map[string]Repository),        pullingPool:  make(map[string]chan struct{}),        pushingPool:  make(map[string]chan struct{}),    }

聲明並定義( 使用 ":=" )了一個類型為TagStore的變數,變數名為store。

 

回顧:

1. 講解了函數的定義

2. 講解了struct的定義和初始化

 

這一篇就先講這麼多,由於精力和時間有限,所以基本是用到什麼寫什麼,不會像很多教程那樣詳細。

有不理解的地方還需自己尋找資料,也可以直接留言大家一起討論。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.