├── LANGS.md ├── LICENSE ├── README.md ├── cover.jpg ├── en ├── README.md └── SUMMARY.md ├── fr ├── README.md └── SUMMARY.md ├── tr ├── README.md └── SUMMARY.md └── zh ├── 01.0.md ├── 01.1.md ├── 01.2.md ├── 01.3.md ├── 01.4.md ├── 01.5.md ├── 01.6.md ├── 02.0.md ├── README.md ├── SUMMARY.md ├── code └── socket.go └── images ├── docker_architecture.png ├── docker_flow.png ├── docker_hell.png ├── docker_logo.png ├── docker_vm_1.png └── docker_vm_2.png /LANGS.md: -------------------------------------------------------------------------------- 1 | * [English](en/) 2 | * [中文](zh/) 3 | * [Türkçe](tr/) 4 | * [Français](fr/) 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Go system programming 2 | ===================== 3 | 4 | Go System Programming is a book about how to Linux System Programming in Go. There's many books introduce the basic Go. Like: 5 | 6 | - [Go tutorial](http://tour.golang.org/) 7 | - [Learning Go](http://archive.miek.nl/projects/learninggo/index.html) 8 | - [Build web application with golang](http://astaxie.gitbooks.io/build-web-application-with-golang/content/) 9 | - [Learn Go By Example](https://gobyexample.com/) 10 | 11 | But I found there's no books introduce Go System Programming these years. Actually Go is the best system language in 21th Century. There's so many system developed by Go. like `Docker`, `etcd`, `consul` etc. It's all related with system programming. But if we want to develop an application related with Linux. There's rarely materials about how to use Go to do the system. Like `Linux IO`, `Socket`, `mmap`, `Lock`, `Thread`, `Process` etc. So I want to write this book to introduce Linux System Programming. I will write this book in Chinese. Later will translate into other languages. 12 | 13 | * [English](en/) 14 | * [中文](zh/) 15 | * [Türkçe](tr/) 16 | * [Français](fr/) 17 | -------------------------------------------------------------------------------- /cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/astaxie/go-system-programming/81798556e6842d48e114432630497ce367b0f02f/cover.jpg -------------------------------------------------------------------------------- /en/README.md: -------------------------------------------------------------------------------- 1 | Go system programming 2 | ===================== 3 | 4 | Go System Programming is a book about how to Linux System Programming in Go. There's many books introduce the basic Go. Like: 5 | 6 | - [Go tutorial](http://tour.golang.org/) 7 | - [Learning Go](http://archive.miek.nl/projects/learninggo/index.html) 8 | - [Build web application with golang](http://astaxie.gitbooks.io/build-web-application-with-golang/content/) 9 | - [Learn Go By Example](https://gobyexample.com/) 10 | 11 | But I found there's no books introduce Go System Programming these years. Actually Go is the best system language in 21th Century. There's so many system developed by Go. like `Docker`, `etcd`, `consul` etc. It's all related with system programming. But if we want to develop an application related with Linux. There's rarely materials about how to use Go to do the system. Like `Linux IO`, `Socket`, `mmap`, `Lock`, `Thread`, `Process` etc. So I want to write this book to introduce Linux System Programming. I will write this book in Chinese. Later will translate into other languages. 12 | 13 | [summary](SUMMARY.md) 14 | -------------------------------------------------------------------------------- /en/SUMMARY.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/astaxie/go-system-programming/81798556e6842d48e114432630497ce367b0f02f/en/SUMMARY.md -------------------------------------------------------------------------------- /fr/README.md: -------------------------------------------------------------------------------- 1 | Programmation Système en Go 2 | =========================== 3 | 4 | Programmation Système en Go est un livre pour faire de la Programmation Système sous Linux avec Go. Il existe plusieurs livres d'introduction à Go. Par exemple: 5 | 6 | - [Go tutorial](http://tour.golang.org/) 7 | - [Learning Go](http://archive.miek.nl/projects/learninggo/index.html) 8 | - [Build web application with golang](http://astaxie.gitbooks.io/build-web-application-with-golang/content/) 9 | - [Learn Go By Example](https://gobyexample.com/) 10 | 11 | Mais aucun livre n'a été publié à ce jour pour apprendre la Programmation Système avec Go. Go est concrètement le meilleur langage système du 21ième siècle. Il y a tellement de systèmes développés avec Go. Comme `Docker`, `etcd`, `consul` etc.. Ils sont tous liés à la programmation système. Mais si nous voulons développer une application liée à Linux, il y a très peu de ressources pour apprendre à interagir avec le système. Comme `Linux IO`, `Socket`, `mmap`, `Lock`, `Thread`, `Process` etc.. C'est pourquoi je veux écrire ce livre d'introduction à la Programmation Système sous Linux. J'écrirai ce livre en Chinois, les traductions seront disponibles plus tard dans d'autres langages. 12 | 13 | [résumé](SUMMARY.md) 14 | -------------------------------------------------------------------------------- /fr/SUMMARY.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/astaxie/go-system-programming/81798556e6842d48e114432630497ce367b0f02f/fr/SUMMARY.md -------------------------------------------------------------------------------- /tr/README.md: -------------------------------------------------------------------------------- 1 | Go ile Sistem Programlama 2 | ===================== 3 | 4 | Go Sistem Programlama kitabı Linux Sistemlerin Go ile nasıl programlandığını anlatmaktadır. Bir çok kitap bunu sadece giriş seviyesinde anlatmakta ve bu yeterli bulunmamaktadır. 5 | Örneğin: 6 | 7 | - [Go tutorial](http://tour.golang.org/) 8 | - [Learning Go](http://archive.miek.nl/projects/learninggo/index.html) 9 | - [Build web application with golang](http://astaxie.gitbooks.io/build-web-application-with-golang/content/) 10 | - [Learn Go By Example](https://gobyexample.com/) 11 | 12 | Ancak bir kaç zamandır çıkan hiç bir kitap sistem programlamayı Go ile anlatmıyordu. Aslında Go 21. yüzyılın en iyi sistem programlama dili. Bir çok sistem Go ile tasarlanmakta.`Docker`, `etcd`, `consul` gibi yapılar buna örnek verilebilir. Bunların hepsinin sistem programlama ile bir ilişkisi vardır. Eğer biz Linux ile ilgili bir uygulama geliştirmek istiyorsak, `Go ile sistem programlama` ile ilgili olan nadir bir kaç materyal bulunmaktadır. Örneğin :`Linux IO`, `Socket`, `mmap`, `Lock`, `Thread`, `Process`. Bu yüzden Linux Sistem Programlamayı kapsayacak şekilde yazmak istendi. İlk olarak Çince yazılacak olan bu kaynak daha sonra diğer dillere çevrilecektir. 13 | 14 | [ÖZET](SUMMARY.md) 15 | -------------------------------------------------------------------------------- /tr/SUMMARY.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /zh/01.0.md: -------------------------------------------------------------------------------- 1 | # 开发环境配置 2 | 由于我们每个人的电脑环境都不一样,例如我经常使用的是Mac,但是系统开发完成之后基本都是部署在Linux系统,而有些人开发使用Windows、Linux等系统,为了保持和大家一样的环境,我打算采用docker的方式,因为目前docker基本上支持所有的系统,这样我们就可以保持同一个环境,我接下来写的代码和Linux知识都会基于docker的这个image讲解,这样就可以保持大家看到的书和运行的代码匹配起来,不至于出现大家环境不一致的情况。 3 | 4 | 这一章我主要会讲解docker的基本信息,如何在本机建立起来docker,以及一些docker常用的命令,最后保证大家的Go环境建立起来,搭建一个基于docker的Go开发环境,这就是本章的目标 -------------------------------------------------------------------------------- /zh/01.1.md: -------------------------------------------------------------------------------- 1 | # Docker的介绍 2 | Docker可以说是Go语言里面的killer app, 正是随着Docker的流行,越来越多的云计算公司采用Go语言作为他们的主要开发语言,例如corsOS、Google Cloud Platform等公司。那么为什么Docker会如此之火呢?让我们一层一层剥开Docker的神秘面纱,看看它到底好在哪里? 3 | 4 | ![](images/docker_logo.png) 5 | 6 | ## Docker和虚拟机的区别 7 | 8 | 可能今年大家都听说过Docker,那么这条大鲸鱼到底是干嘛的呢?Docker其实就是虚拟化的延伸,我们常见的虚拟机有VirtualBox,VMware等,传统的那些云计算厂商,如AWS,阿里云,UCloud等云主机系统都是建立在虚拟机之上的,那么他们这些云主机是怎么运行的呢?基本上都是如下图所示的架构: 9 | 10 | ![](images/docker_vm_1.png) 11 | 12 | 可以看到传统的虚拟云主机是建立在Host主机之上一个全新的操作系统,利用虚拟技术来进行全新的各方面的隔离,所以我们要发布一个应用,除了包含了你的应用之外,还包含了体积庞大的操作系统,这不仅使得应用跑的性能低下,还使得应用无法方便的移植,因为依赖于系统。 13 | 14 | 但是Docker的改进之处就是变得非常的轻量级,Docker是基于Host主机之上的一个进程应用,利用了Linux的内核特性虚拟化,运行一个contrainer和运行一个进程一模一样,所以可以很快速的启动一个应用,而且app之间又很好的隔离了。这解决了传统虚拟机的两个痛点,1:不需要新装系统,2:可以自由的移植,因为是基于同一个内核运行的,所以编译一次,可以扔到任意Docker Engine支持的系统上运行。目前Docker不支持windows,但是随着Docker目前的发展趋势,支持windows是迟早的事情,目前的架构设计也在朝着支持的方向走。 15 | 16 | ![](images/docker_vm_2.png) 17 | 18 | ## Docker的目标 19 | 简单的一句话就是:编译一次到处运行,请看下面这个比较形象的图 20 | 21 | ![](images/docker_hell.png) 22 | 23 | 大家都知道集装箱是用来封装各种不同的货物,封装之后就可以让各种交通工具运输,Docker也是采用了同样的理念,不同的应用采用Docker封装起来,然后通过image传输,在目标系统中运行起来就可以。这样就标准化了我们应用的环境接口,Docker engine就可以做这些工作。 24 | 25 | ## Docker的架构 26 | Docker的成功还在于他设计的这个C/S架构,小而美的架构设计,而且扩展设计都非常好,我们先来看一个整体的设计图: 27 | 28 | ![](images/docker_architecture.png) 29 | 30 | 上面这个架构我们可知Docker主要分成三个部件: 31 | 32 | - Docker Daemon 33 | - Docker Client 34 | - Docker Registry 35 | 36 | ## Docker的技术基础 37 | 38 | - Namespace 39 | - Control Group 40 | - UnionFS 41 | - LXC 42 | 43 | ## Docker的操作流程 44 | 45 | ![](images/docker_flow.png) -------------------------------------------------------------------------------- /zh/01.2.md: -------------------------------------------------------------------------------- 1 | # Docker安装配置 2 | -------------------------------------------------------------------------------- /zh/01.3.md: -------------------------------------------------------------------------------- 1 | # Docker使用入门 2 | -------------------------------------------------------------------------------- /zh/01.4.md: -------------------------------------------------------------------------------- 1 | # Go环境安装配置 2 | -------------------------------------------------------------------------------- /zh/01.5.md: -------------------------------------------------------------------------------- 1 | # 总结 2 | -------------------------------------------------------------------------------- /zh/01.6.md: -------------------------------------------------------------------------------- 1 | # 每章一练 2 | -------------------------------------------------------------------------------- /zh/02.0.md: -------------------------------------------------------------------------------- 1 | # 基本概念 2 | -------------------------------------------------------------------------------- /zh/README.md: -------------------------------------------------------------------------------- 1 | Go系统编程 2 | ===================== 3 | 4 | Go出来已经五年多了,但是至今都没有关于系统级别的书,目前市场上的教材和书都是针对入门介绍的,大概有如下这些材料: 5 | 6 | - [Go 入门指南](http://tour.golang.org/) 7 | - [学习Go语言](http://archive.miek.nl/projects/learninggo/index.html) 8 | - [通过例子学习Go语言](https://gobyexample.com/) 9 | - [Go Web 编程](http://astaxie.gitbooks.io/build-web-application-with-golang/content/) 10 | 11 | 但是我们知道Go应该是21世纪最好的系统级别的语言,目前市场上很多应用都是类似这方面的,例如`docker`,`etcd`,`consul`等系统,如果你想设计一个系统级别的系统,例如消息推送系统,系统编程是必须需要了解的知识,系统编程包含了文件IO操作,socket操作,mmap操作,锁,同步,异步,协程等各方面的知识,我希望通过这本书让我自己能够更加深入的了解Go和系统编程,同时通过这个实战代码让大家有所收获。成为大家系统编程的一个手册书。 12 | 13 | [目录](SUMMARY.md) -------------------------------------------------------------------------------- /zh/SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | 3 | * [导读](README.md) 4 | * [开发环境配置](01.0.md) 5 | * [Docker的介绍](01.1.md) 6 | * [Docker安装配置](01.2.md) 7 | * [Docker使用入门](01.3.md) 8 | * [Go环境安装配置](01.4.md) 9 | * [总结](01.5.md) 10 | * [每章一练](01.6.md) 11 | * [基本概念](02.0.md) 12 | * 内核 13 | * shell 14 | * 用户和组 15 | * 文件I/O模型 16 | * 程序 17 | * 进程 18 | * 内存映射 19 | * 静态库和动态库 20 | * 进程间通信 21 | * 线程 22 | * 日期和时间 23 | * 实时性 24 | * /proc文件系统 25 | * 总结 26 | * 每章一练 27 | * 系统编程概念 28 | * 系统调用 29 | * 库函数 30 | * 标准库glibc 31 | * 可移植性 32 | * 总结 33 | * 每章一练 34 | * 文件I/O 35 | * 进程 36 | * 内存管理 37 | * 用户和组 38 | * 时间 39 | * 文件和目录 40 | * 信号 41 | * 线程和goroutine 42 | * DAEMON 43 | * 并发编程 44 | * 管道和FIFO 45 | * 内存映射 46 | * SOCKET编程 47 | * IO模型 48 | 49 | -------------------------------------------------------------------------------- /zh/code/socket.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "log" 5 | "net" 6 | ) 7 | 8 | func main() { 9 | ln, err := net.Listen("tcp", ":8080") 10 | if err != nil { 11 | log.Fatal(err) 12 | } 13 | for { 14 | conn, err := ln.Accept() 15 | if err != nil { 16 | log.Println("Accept err:", err) 17 | } 18 | go handleConnection(conn) 19 | } 20 | } 21 | 22 | func handleConnection(conn net.Conn) { 23 | buffer := make([]byte, 1024) 24 | bytesRead, error := conn.Read(buffer) 25 | if error != nil { 26 | log.Println("Client connection error: ", error) 27 | } 28 | log.Println("get content from client:", string(buffer[0:bytesRead])) 29 | } 30 | -------------------------------------------------------------------------------- /zh/images/docker_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/astaxie/go-system-programming/81798556e6842d48e114432630497ce367b0f02f/zh/images/docker_architecture.png -------------------------------------------------------------------------------- /zh/images/docker_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/astaxie/go-system-programming/81798556e6842d48e114432630497ce367b0f02f/zh/images/docker_flow.png -------------------------------------------------------------------------------- /zh/images/docker_hell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/astaxie/go-system-programming/81798556e6842d48e114432630497ce367b0f02f/zh/images/docker_hell.png -------------------------------------------------------------------------------- /zh/images/docker_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/astaxie/go-system-programming/81798556e6842d48e114432630497ce367b0f02f/zh/images/docker_logo.png -------------------------------------------------------------------------------- /zh/images/docker_vm_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/astaxie/go-system-programming/81798556e6842d48e114432630497ce367b0f02f/zh/images/docker_vm_1.png -------------------------------------------------------------------------------- /zh/images/docker_vm_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/astaxie/go-system-programming/81798556e6842d48e114432630497ce367b0f02f/zh/images/docker_vm_2.png --------------------------------------------------------------------------------