Go

手撸golang 学ectd 手写raft协议13 小结

53 0

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

Go

go特性总结(1.13~1.16)

362 0

go1.131.对数字字面量进行了改动在1.13版本之前的golang仅支持十进制和十六进制的字面量,而其他语言使用广泛的二进制和八进制却不能支持例如下面代码就无法编译: fmt.Println(0b101) fmt.Println(0o10)在go1.13中上述字面量语法已经被支持了你可以通过0b或0B前缀来表明一个二进制数字的字面量,以及用0o和0O来表明八进制字面量。值得注意的是虽然两种写法都可以,但是gofmt默认会全部转换为小写1.13以下版本运行则会出现以下错误信息: # c

Go

静态网站 介绍

68 0

什么是静态网站生成器静态网站生成器是使用一系列配置、模板以及数据,生成静态 HTML 文件及相关资源的工具 由于它是提前生成静态网页,通常将这个功能也叫预渲染 生成的网站不需要类似 PHP 这样的服务器 只需要放到支持静态资源的 Web Server 或 CDN 上即可运行静态网站好处省钱:不需要专业的服务器,只要能托管静态文件的空间即可· 快速:不经过后端服务器的处理,只传输内容 安全:没有后端程序的执行,自然会更安全常见静态网站生成器Jekyll (Ruby) Hexo (Node) Hugo(Gol

Go

Go gob

82 0

为了让数据结构能够在网络中传输或保存到文件,它必须被编码后再解码。目前有多种可用的编码方式,比如JSON、XML、Google的Protocol Buffers等。 Gob(go binary)是Golang自己以二进制形式序列化和反序列化程序数据的格式,位于encoding/gob包中。类似于Python中的pickle和Java中Serialization。gob可用于传递远端程序调用(RPC)的参数和结果。encoding/gob包实现了高效地序列化,特别是数据结构负责的,比如结构体、数字、切片。e

Go

Go 函数选项模式

48 0

作为 Golang 开发者,遇到的许多问题之一就是尝试将函数的参数设置成可选项。这是一个十分常见的场景,您可以使用一些已经设置默认配置和开箱即用的对象,同时您也可以使用一些更为详细的配置。 对于许多编程语言来说,这很容易。在 C 语言家族中,您可以提供具有同一个函数但是不同参数的多个版本;在 PHP 之类的语言中,您可以为参数提供默认值,并在调用该方法时将其忽略。但是在 Golang 中,上述的做法都不可以使用。那么您如何创建具有一些其他配置的函数,用户可以根据他的需求(但是仅在需要时)指定一些额外的配置

Go

为什么选择 Golang?彻底解决争论

43 0

我们都经历过绿地(greenfield)项目初期的幸福感。对于每一个决定,你都有无限的选择余地,当你启动项目编码的时候,你首先要处理的问题是我应该选择哪种编程语言来开发我的项目?我是应该使用一种新的有趣的语言还是应该坚持使用最流行的语言?幸运的是,在 baconce Technology,我们的专家对这些问题非常熟悉,因为我们处理过各种宽高比(shapes)和尺寸的客户端(屏幕),而且我们总是在考虑编程语言应该适合服务器端应用程序开发这一共同可能性的情况下做出选择。这就是为什么我们特别重视 Golang

Go

24 goroutine channel实现并发和并行(一)

63 0

进程和线程进程就是一个正在执行的程序。一个进程至少有5种基本状态,它们是:初始态、执行态、等待状态、就绪状态、终止状态。 线程是进程的一个执行实例,是程序执行的最小单元。 一个进程可以创建多个线程,同一个进程中的多个线程可以并发执行,一个程序要运行至少有一个进程。并发和并行并发:多个线程同时竞争一个位置,竞争到的才可以执行,每个时间段只有一个线程在执行。 并行:多个线程可以通知执行,每个时间段,可以有多个线程执行。通俗地说,多线程程序在单核CPU上运行就是并发,多线程程序在多核CPU上运行就是并行,如果线

Go

25 goroutine channel实现并发和并行(二)

36 0

为什么要使用goroutine打印1-100000之间的素数(为了延长程序的执行时间,不采用开方的算法)传统方法,通过for循环遍历各个数 使用并发或并行,将统计素数的任务分配给多个goroutine去完成 goroutine结合channelfunc main() {fmt.Println("开始")start := time.Now().Unix()for num := 2; num < 10