简单需求 最近一个需求,从一个yaml文件中读取多个文档,例如有下面的文档结构: name: "doc first" --- name: "second" --- name: "skip 3, now 4" --- 通过gopkg.in/yaml.v3``Deocder可以帮我们解析出来,默认使用"—“来区分不同的文档。 package main import "fmt" import "gopkg.in/yaml.v3" import "os" import "errors" import "io" type Spec struct { Name string `yaml:"name"` } func main() { f, err := os.Open("spec.yaml") if err != nil { panic(err) } d := yaml.NewDecoder(f) for { // create new spec here spec := new(Spec) // pass a reference to spec reference err := d.Decode(&spec) //
Golang中的defer关键字实现比较特殊的功能,按照官方的解释,defer后面的表达式会被放入一个列表中,在当前方法返回的时候,列表中的表达式就会被执行。一个方法中可以在一个或者多个地方使用defer表达式,这也是前面提到的,为什么需要用一个列表来保存这些表达式。在Golang中,defer表达式通常用来处理一些清理和释放资源的操作。 貌似看起来比较难懂,
开发go程序的时候,时常需要使用goroutine并发处理任务,有时候这些goroutine是相互独立的,而有的时候,多个goroutine之间常常是需要同步与通信的。另一种情况,主goroutine需要控制它所属的子goroutine,总结起来,实现多个goroutine间的同步与通信大致有: 全局共享变量 channel通信(CSP模型) Context包 本文
集群架构与组件 Kubernetes 集群架构以及相关的核心组件如下图所示:一个 Kubernetes 集群一般包含一个 Master 节点和多个 Node 节点,一个节点可以看成是一台物理机或虚拟机。 Master Master 是 K8S 的集群控制节点,每个 K8S 集群里需要有一个 Master 节点来负责整个集群的管理和控制,基本上 K8S 所有的控制命令都是发给它,它来负责具体的执行过程。Master 节点通常会占据一个独立的服务器,因为它太重要了,如果它不可用,那么所有的控制
什么是传值(值传递) 传值的意思是:函数传递的总是原来这个东西的一个副本,一副拷贝。比如我们传递一个int类型的参数,传递的其实是这个参数的一个副本;传递一个指针类型的参数,其实传递的是这个该指针的一份拷贝,而不是这个指针指向的值。 对于int这类基础类型我们可以很好的理解,它们就是一个拷贝,但是指针呢?我们觉得可以通过它修改原来的值,怎么会是一个拷贝呢?下面我
认识 有些概念有名字,并且有时候我们关注这些名字,甚至(特别)是在我们代码中。 const ( CCVisa = "Visa" CCMasterCard = "MasterCard" CCAmericanExpress = "American Express" ) 在其他时候,我们仅仅关注能把一个东西与其他的做区分。有些时候,有些时候一件事没有本质上的意义。比如,我们在一个数据库表中存储产品,我们可能不想以 string 存储他们的分类。我们不关注这个分类是怎样命名的,此外,该名字在市场上一直在变化。 我们仅仅关注它们是怎么彼此区分的
Go标准库提供了几个package可以产生输出结果,而text/template 提供了基于模板输出文本内容的功能。html/template 则是产生 安全的HTML格式的输出。 01 text/template样例 Golang text/template 包是一个数据驱动的模版渲染工具。提供条件判断,数组或map遍历;参数赋值,函数或方法调用;自定义函数扩展,模板嵌套及重用等功能。基于该工具,可以轻松实
柔性事务之前我们先来回归传统事务 传统事务 第一次接触事务的时候,被人告知事务是原子的,要么都成功要么都失败。再进一步就有ACID这四 个属性,原子性(Atomictiy)、一致性(Consistency)、隔离性(Isolation)、持久性(Durabilit)。 我们首先看下一些书籍中的官方描述: 原子性:事务是一个包含一系列操作的原子操作。事务的原子性确保这些
前言 磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。 这次,我们就以「文件传输」作为切入点,来分析 I/O 工作方式,以及如何优化传输文件的性能。 为什么要有 DMA 技术? 在没有 DMA 技术前,
WEB资源或API方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。 幂等性是系统的接口对外一种承诺(而不是实现), 承诺只要调用接口成功, 外部多次调用对系统的影响是一致的。 幂等性是分布式系统设计中的一个重要概念,对超时处理、系统恢复等具有重要意义。声明为幂等的接口会认为外部调用失败是常态, 并且失败之后必然会有重试。例如,在因网络中断等原因导致请求方