[Go语言]从Docker源码学习Go

abv123456789 · · 2493 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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的定义和初始化

 

这一篇就先讲这么多,由于精力和时间有限,所以基本是用到什么写什么,不会像很多教程那样详细。

有不理解的地方还需自己查找资料,也可以直接留言大家一起讨论。


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:abv123456789

查看原文:[Go语言]从Docker源码学习Go

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2493 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传