if语句 继续看docker.go文件的main函数 if reexec.Init() { return } go语言的if不需要像其它语言那样必须加括号,而且,可以在判断以前,增加赋值语句 语法 IfStmt = "if" [ SimpleStmt ";" ] Expression Block [ "else" ( IfStmt | Block ) ] . 例子 if x := f(); x < y { return x } else i…
Docker在最近很火,而作为Docker的开发语言-Go也再次被大家提到. 已经使用Docker一段时间了,但是对于源码,尤其是其开发语言Go却一直是一知半解. 最近准备利用空余时间从Docker源代码入手来学习一下Go,同时对Docker的实现也希望可以提高一个层次. 有兴趣的可以一起讨论,学习. 准备工作: 1. Docker源代码https://github.com/docker/docker (版本1.1.2) 2. 安装开发工具LiteIDE, 这个是官方的Go语言的IDE 3. G…
这两天在看reflect这个包在Docker中的使用时,遇到了各种问题,最后虽然知道怎么用了. 但是对于这块的原理还不是太懂,于是把"THE WAY TO GO"中关键的几章看了下. 继续坚持往下写,争取能说明白. 源码 还是先看Docker中源码, docker/api/client/cli.go type DockerCli struct { proto string addr string configFile *registry.ConfigFile in io.ReadClo…
function和method关系 method是针对某一类型定义的function, function可以单独调用,method必须针对某一类型的实例进行调用 //function 调用方式 packageName.FuncName() //method 调用方式 var t packageName.Type t.MethodName() 源码 func (cli *DockerCli) LoadConfigFile() (err error) { cli.configFile, err =…
init()方法 如果想在一个go文件里,进行一些初始化的工作,可以把代码放到init()方法中. init()方法先被执行. func init() { // initialization of package } 注意:它是没有输入参数和返回参数的. identifier首字母大小写区分 当identifier(比如constant,variable,type,function,struct field,...)的命名首字母是大写的话,那表示这个identifier在包外是可以见的: 类似p…
Go程序从main包下的main函数开始执行,当main执行结束后,程序退出. Docker的main函数在 docker/docker/docker.go package main //Import needed packages; import ( ... "github.com/docker/docker/api" ... ) //define const; const ( defaultCaFile = "ca.pem" defaultKeyFile = &…
Interface定义: type Namer interface { Method1(param_list) return_type Method2(param_list) return_type ... } 注: 1. interface中不能包含变量 2. 一个类型不用显式去定义实现某个接口,只要包含所有interface中定义的方法,这个类型就默认实现了这个接口 3. 多个类型可以实现相同的接口 4. 一个类型实现接口的同时,还可以定义属于自己的方法 5. 一个类型可以实现多个接口 嵌套…
你必须非常努力,才能看起来毫不费力! 微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero ! 前言 日常 Go 开发中,Context 包是用的最多的一个了,几乎所有函数的第一个参数都是 ctx,那么我们为什么要传递 Context 呢,Context 又有哪些用法,底层实现是如何呢?相信你也一定会有探索的欲望,那么就跟着本篇文章,一起来学习吧! 需求一 开发中肯定会调用别的函数,比如 A 调用 B,在调用过程中经常会设置超时时间,比如超过2s 就不等待 B 的结果…
阅读本文大概需要 6 分钟 一个项目随着功能开发越来越多,项目必然越来越大,工程管理成本也越来越高,后期维护成本更高.如何更好的组织管理工程,是非常重要的 今天我们来学习下 Qt Creator 是如何组织管理这么庞大的一个项目工程的 QMake 多工程管理方法 我们知道 Qt 采用 qmake语法进行组织管理工程结构,想要更好的学习管理一个工程需要你了解基本的qmake语法 在Qt当中,一般以xx.pro结尾的文件是某个工程文件,我们只要打开该文件即可打开该文件管理的工程 单工程基本用法 比如…
阅读本文大概需要 8 分钟 插件听上去很高大上,实际上就是一个个动态库,动态库在不同平台下后缀名不一样,比如在 Windows下以.dll结尾,Linux 下以.so结尾 开发插件其实就是开发一个动态库,该动态库能够很好的加载进主程序.访问主程序资源.和主程序之间进行通信 本篇文章一起学习下 Qt Creator当中是如何实现插件的开发.加载.解析.管理以及互相通信的,方便我们开发自定义插件打下基础 简介 Qt Creator 插件理解起来其实很简单,定义一个接口类作为基类,其他插件需要继承该类…
1 前言 Docker诞生以来,便引领了轻量级虚拟化容器领域的技术热潮.在这一潮流下,Google.IBM.Redhat等业界翘楚纷纷加入Docker阵营.虽然目前Docker仍然主要基于Linux平台,但是Microsoft却多次宣布对Docker的支持,从先前宣布的Azure支持Docker与Kubernetes,到如今宣布的下一代Windows Server原生态支持Docker.Microsoft的这一系列举措多少喻示着向Linux世界的妥协,当然这也不得不让世人对Docker的巨大影响…
1. 前言 如今,Docker作为业界领先的轻量级虚拟化容器管理引擎,给全球开发者提供了一种新颖.便捷的软件集成测试与部署之道.在团队开发软件时,Docker可以提供可复用的运行环境.灵活的资源配置.便捷的集成测试方法以及一键式的部署方式.可以说,Docker的优势在简化持续集成.运维部署方面体现得淋漓尽致,它完全让开发者从持续集成.运维部署方面中解放出来,把精力真正地倾注在开发上. 然而,把Docker的功能发挥到极致,并非一件易事.在深刻理解Docker架构的情况下,熟练掌握Docker C…
1 背景 1.1 Docker简介 Docker是Docker公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议.目前,Docker可以在容器内部快速自动化部署应用,并可以通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等.由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率,并且提升诸如IO等方面的性能. 由于众多…
原文地址: http://www.infoq.com/cn/articles/docker-source-code-analysis-part1  作者:孙宏亮 1 背景 1.1 Docker简介 Docker是Docker公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议.目前,Docker可以在容器内部快速自动化部署应用,并可以通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等.由于Docker…
最近在研究golang,也学习一下比较火的开源项目docker的源代码,国内比较出名的docker源码分析是孙宏亮大牛写的一系列文章,但是基于的docker版本有点老:索性自己就git 了一下最新的代码研读: docker是c/s的架构,分为docker client 和 docker daemon,client端发送命令,daemon端负责完成client发送过来的命令(如获取和存储镜像.管理容器等).两者之间可以通过TCP,HTTP和UNIX SOCKET来进行通信: docker的启动入口…
String源码学习 零散的收获 数组的元素类型可以通过getComponentType来获取到 子类型的数组可以赋值给父类型的数组,.但是并不存在继承关系.数组的父类是Object. 通过声明如下代码来控制需要序列化的field private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0]; Java中的char都是以unicode编码来保存字符的,占用2个字节. might…
上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); var self = baseCreate(sourceFunc.prot…
The UI-即上图左下角metamask-ui部分,即其图形化界面 The MetaMask UI is essentially just a website that can be configured by passing it the API and state subscriptions from above. Anyone could make a UI that consumes these, effectively reskinning MetaMask. MetaMask UI…
写在前面的废话: 学完git之后,还是感觉云里雾里的,于是乎,就想到了通过学习git源码,来加深git的熟练度,同时学习一下c语言编程. git源码学习,逐步分析 这篇帖子是逐步分析git源码的,将git的源码按照逻辑块剥离出来,形成一个可执行程序,以便进一步了解git.当然分析的git源码是从git第一次提交开始的.最新的git源码,做为菜鸟的我是不可能看懂的,这辈子都不可能看懂的.接下来进入正题. 1.准备工作 1.1 git clone git源码: 在git命令行中键入如下代码 // 二…
1.Docker Client配置容器网络模式 Docker目前支持4种网络模式,分别是bridge.host.container.none,Docker开发者可以根据自己的需求来确定最适合自己应用场景的网络模式. 从Docker Container网络创建流程图中可以看到,创建流程第一个涉及的Docker模块即为Docker Client.当然,这也十分好理解,毕竟Docker Container网络环境的创建需要由用户发起,用户根据自身对容器的需求,选择网络模式,并将其通过Docker Cl…
python源码学习(一)——python的总体架构 学习环境: 系统:ubuntu 12.04 STLpython版本:2.7既然要学习python的源码,首先我们要在电脑上安装python并且下载python的源码,ubuntu 12.04 STL自带的python版本为2.7.3,这就可以了,接下来下载源码,下载python2.7.7的源代码,下载结束后解压文件,我们会看到如下文件结构:,接下来介绍一下,demo文件夹里放的是一些例子:Doc文件夹里放的是文档,Grammer是语法分析器,…
Spring是在Rod Johnson的<Expert One-On-One J2EE Development and Design >的基础上衍生而来的.主要目的是通过使用基本的javabean来完成以前只能用EJB完成的事情降低企业应用的复杂性.这一系列源码学习是基于Spring-4.3.11版本的. 一.Spring的整体架构 如图所示,spring可以被总结为一下几个部分: (1)Core Container 为Spring的核心容器,包含Beans,Core,Context和SpEL…
目录 1.ContentNegotiatingViewResolver 2.静态资源 3.自动注册 Converter, GenericConverter, and Formatter beans. 4.支持HttpMessageConverters 5.支持MessageCodesResolver 6.首页支持 7.网站logo设置 8.ConfigurableWebBindingInitializer 初始绑定器 源码学习系列之WebMvc自动配置原理笔记 @ web的自动配置在Spring…
前言介绍 附录:Spring源码学习专栏 在前面章节的学习中,我们对Spring框架的IOC实现源码有了一定的了解,接着本文继续学习Springframework一个核心的技术点AOP技术. 在学习Spring AOP源码之前,您是否对AOP有足够熟悉的理解?在对应用都不熟悉之前就去学习源码,肯定是很难理解的,所以本文先不描述源码的实现,先通过本篇博客了解熟悉Spring AOP,然后再学习源码 1.什么是AOP技术? 引用Spring官网对AOP技术的概述: Aspect-Oriented P…
0x.00 前言 在用了5章篇幅 ElementUI源码学习:从零开始搭建Vue组件库汇总 讲解了如何编写一个组件.发布npm以及生成展示文档之后.接下来将分析Element项目的代码结构,学习其工程化思想. 前端开发早已从瘦客户端(thin client)架构/中心服务器(server-centric)架构进入到胖客户端(fat client)架构,各家技术百花齐放,让人目不暇接,直呼学不动了!伴随项目开发的复杂度日益增高,开发中需要直面各种问题: 开发效率.产品质量.多人协作等. 前端工程化…
0x.00 前言 项目工程化系列文章链接如下,推荐按照顺序阅读文章 . 1️⃣ 源码剖析之工程化(一):项目概览.package.json.npm script 2️⃣ 源码剖析之工程化(二):项目构建.MD解析 3️⃣ 源码剖析之工程化(三):打包配置 前文对项目目录结构.package.json.npm script各命令任务内容和执行过程进行了概述.书接上文,build 目录下定义了许多项目构建脚本和配置(开发,打包,部署,持续集成). npm script各命令作为入口,会调用 buil…
本文章共5314字,预计阅读时间5-15分钟. 前言 不知不觉Vue-next的版本已经来到了3.1.2,最近对照着源码学习Vue3的全局Api,边学习边整理了下来,希望可以和大家一起进步. 我们以官方定义.用法.源码浅析三个维度来一起看看它们. 下文是关于Vue3全局Api的内容,大家如果有更好的理解和想法,可以在评论区留言,每条我都会回复~ 全局API 全局API是直接在Vue上挂载方法,在Vue中,全局API一共有13个.分别是: createapp 返回一个提供应用上下文的应用实例: h…
柔性数组(Redis源码学习) 1. 问题背景 在阅读Redis源码中的字符串有如下结构,在sizeof(struct sdshdr)得到结果为8,在后续内存申请和计算中也用到.其实在工作中有遇到过这种 struct结构 + 应用数据的情况,但没有意识到自己使用的是柔性数组,在学习阅读Redis代码中,遇到该方法,就特总结记录之. /* * 类型别名,用于指向 sdshdr 的 buf 属性 */ typedef char * sds; /* * 保存字符串对象的结构 */ struct sds…
Spring源码学习笔记9--构造器注入及其循环依赖 一丶前言 前面我们分析了spring基于字段的和基于set方法注入的原理,但是没有分析第二常用的注入方式(构造器注入)(第一常用字段注入),并且在循环依赖问题上构造器注入常被说spring无法解决构造器注入的循环依赖,下面我们来分析构造器注入和其循环依赖的源码 二丶构造器依赖注入 在spring初始化每一个非抽象,单例,非懒加载的bean的时候,会调用createBeanInstance方法去创建bean的实例,在使用默认的策略--无参构造o…
JUC源码学习笔记4--原子类,CAS,Volatile内存屏障,缓存伪共享与UnSafe相关方法 volatile的原理和内存屏障参考<Java并发编程的艺术> 原子类源码基于JDK8 一丶volatile 与内存屏障 volatile修饰的字段,Java线程模型保证所有线程看到这个变量值是一致的. 1.volatile是如何保证可见性 volatile修饰的变量执行写操作的时候多出lock前缀指令的代码,lock前缀的指令会导致 将当前这个处理器缓存行的数据写回到系统内存 这个写回内存的操…