Kubernetes 是什么? 在技术圈大家对大名鼎鼎的 Kubernetes(别名k8s)肯定都是耳熟能详,无论过去、现在和未来,它都将对世界产生非常深远的积极影响。 在此借用官方介绍: Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。 名称 Kubernetes 源于希腊语,意为“舵手”或“飞行员”。Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 在大规模运行生产工作负载方面拥有十几年的经验 的 …
阅读更多背景 我司使用GitLab作为代码仓库,Go项目在CICD过程中需要下载依赖,但大部分情况下依赖并未发生变化,重复下载是无用且非常耗时的操作,严重拖慢了CICD的效率。这对于任何一个追求效率的团队来说都是无法接受的。 之前也了解到一些go依赖缓存的解决方案,但不是特别优雅。从 Go 1.15 Release Notes 中看到,该版本新增了 GOMODCACHE 环境变量的支持,官方说明如下: The location of the module cache may now be set with the GOMODCACHE environment variable. The default value of GOMODCACHE …
阅读更多概要 ELF 是一种文件格式。首次发布在名为 System Release 4 的 Unix 操作系统版本的 ABI 规范中,后来使用在 Tool interface standard中,然后迅速被不同的 Unix 发行版使用。在1999年,ELF 被选为 Unix 和 Unix-like 系统x86处理器的标准二进制文件格式。 文件格式 ELF 文件由 ELF File Header 和 Data 组成,Data 又由以下部分组成: Program header table Section header table 1, 2 表头中引用的数据 ELF file header Program header Section …
阅读更多概要 今天我们来看看Go中的互斥锁 sync/mutex。本文基于go1.15.5 进行分析。 我们借用互斥锁在维基百科上的定义:互斥锁(英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制。该目的通过将代码切片成一个一个的临界区域(critical section)达成。临界区域指的是一块对公共资源进行访问的代码,并非一种机制或是算法。一个程序、进程、线程可以拥有多个临界区域,但是并不一定会应用互斥锁。 在Go中我们无法直接操作线程,使用 go 关键字启动的是goroutine,但goroutine的背后还是操作系统的线程,所以在此我们讨论的 …
阅读更多最近在开发过程中遇到一个比较在编码上无解的问题,最终通过条件编译得到一个比较满意的方案。对于Go的条件编译,可能很多人都了解,甚至不知道。Go通过在行注释的前面编写如下代码来实现条件编译。 1// +build 条件编译的指令可能出现在任何源代码中,不止是*.go文件,可能是go汇编文件。无论是何种源文件,条件编译指令一定都出现在文件的顶部,并且在空行或者其他行注释之前。所以条件编译指令也必须在package语句之前。 编译规则 可以将 // +build 后面的内容当成一个表达式。当表达式返回true时,当前文件参与编译,反之不参与编译。 多个片段之间的空格表示它们之间是OR的关系。如下,表示GOOS值是linux或 …
阅读更多