Go

Go

手撸golang etcd raft协议之2

46 0

手撸golang etcd raft协议之2缘起最近阅读 [云原生分布式存储基石:etcd深入解析] (杜军 , 2019.1)本系列笔记拟采用golang练习之gitee: https://gitee.com/ioly/learning.gooopraft分布式一致性算法分布式存储系统通常会通过维护多个副本来进行容错, 以提高系统的可用性。 这就引出了分布式存储系统的核心问题——如何保证多个副本的一致性?Raft算法把问题分解成了领袖选举(leader election)、 日志复制(log repli

Go

go语言happens-before原则及应用

43 0

了解go中happens-before规则,寻找并发程序不确定性中的确定性。引言先抛开你所熟知的信号量、锁、同步原语等技术,思考这个问题:如何保证并发读写的准确性?一个没有任何并发编程经验的程序员可能会觉得很简单:这有什么问题呢,同时读写能有什么问题,最多就是读到过期的数据而已。一个理想的世界当然是这样,只可惜实际上的机器世界往往隐藏了很多不容易被察觉的事情。至少有两个行为会影响这个结论:编译器往往有指令重排序的优化;例如程序员看到的源代码是a=3; b=4;,而实际上执行的顺序可能是b=4; a=3;,

Go

[go-linq]-Go的.NET LINQ式查询方法

53 0

关于我 我的博客|文章首发 开发者的福音,go也支持linq了 坑爹的集合 go在进行集合操作时,有很不舒服的地方,起初我真的是无力吐槽,又苦于找不到一个好的第三方库,只能每次写着重复代码。举个栗子 类 学生{ 姓名 年龄 性别 } 1、现在有10个学生的数组,如果我要统计所有年龄大于20岁的人,那我需要 一、遍历 二、自定义条件 三、再append数组添加。 2、接着我又要统计性别为男的所有学生,我又要重复上面的步骤。 你说坑爹不坑爹,那是真的坑! 吐槽之处 重点是95%的代码都是一样的,只是那百分之

Go

[go-linq]-Go的.NET LINQ式查询方法

40 0

关于我 我的博客|文章首发 开发者的福音,go也支持linq了 坑爹的集合 go在进行集合操作时,有很不舒服的地方,起初我真的是无力吐槽,又苦于找不到一个好的第三方库,只能每次写着重复代码。举个栗子 类 学生{ 姓名 年龄 性别 } 1、现在有10个学生的数组,如果我要统计所有年龄大于20岁的人,那我需要 一、遍历 二、自定义条件 三、再append数组添加。 2、接着我又要统计性别为男的所有学生,我又要重复上面的步骤。 你说坑爹不坑爹,那是真的坑! 吐槽之处 重点是95%的代码都是一样的,只是那百分之

Go

Go Embed 简明教程

169 0

title: "Go Embed 简明教程" date: 2021-03-07T14:53:56+08:00 draft: true tags: ['go'] author: "dadigang" author_cn: "大地缸" personal: "http://www.real007.cn"关于作者 http://www.real007.cn/about Go embed 简明教程 Go编译的程序非常适合部署,如果没有通过CGO引用其它的库的话,我们一般编译出来的可执行二进制文件都是单个的文件,非常

Go

[concurrent-map]-并发map在go中的使用

215 0

作者:三十三重天首发 | 我的博客 通过学习和分享的过程,将自己工作中的问题和技术总结输出,希望菜鸟和老鸟都能通过自己的文章收获新的知识,并付诸实施。 引言 Go语言原生的map类型并不支持并发读写。 在Go 1.9之前,go语言标准库中并没有实现并发map。在Go 1.9中,引入了sync.Map。 concurrent-map的优势 concurrent-map提供了一种高性能的解决方案:通过对内部map进行分片,降低锁粒度,从而达到最少的锁等待时间(锁冲突)。 sync.Map与此concurren

Go

Go封装、继承、多态

199 0

封装封装主要是通过访问权限控制实现的。在Java中,共有public 、protected、default、private这四种权限控制。而相应的在golang中,是通过约定来实现权限控制的。变量名首字母大写,相当于java中的public,首字母小写,相当于private。同一个包中访问,相当于default。由于go没有继承,也就没有protected。继承虽然golang的语法没有继承,但是可以通过相应的结构体之间的组合来实现类似的继承效果。例子如下:package mainimport "fmt"

Go

一个小技巧加快 golang docker 镜像构建速度,避免频繁下载 go mod

357 0

Dockerfile先 COPY go.mod 执行 go mod download,再 COPY 源码执行 build。利用 docker image 分层构建的特性,每行命令为一层。如果底层不变,则可使用 cache,无需重复构建。源码比 go.mod 修改更频繁。FROM golang:1.15-alpine AS builder WORKDIR /workspace ENV GO111MODULE=on GOPROXY=https://goproxy.cn,direct# cache de