golang

Go

Golang面向对象编程之继承&虚基类【组合&接口】

131 0

Golang面向对象编程之继承&虚基类【组合&接口】 201808 相关说明Golang里面没有像C++一样有继承相关的概念,但是我们却可以实现继承相关的用法,这就要用到struct、interface这两个结构。 Golang里面有组合的概念,也就是一个struct 里面可以包含一个或者多个struct,struct可以近似理解为面向对象编程中的class,但是不能等同,有很多区别。如果一个struct实现了某个接口的所有方法,那么只要是包含这个struct的所有其他struct也都是实现了这个接口的所

Go

Golang interface接口深入理解

47 0

Golang interface接口深入理解 interface 介绍如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键。在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心。 Go不是一种典型的OO语言,它在语法上不支持类和继承的概念。 没有继承是否就无法拥有多态行为了呢?答案是否定的,Go语言引入了一种新类型—Interface,它在效果上实现了类似于C++的“多态”概念,虽然与C++的多态在语法上并非完全对等,

Go

Go-Struct

40 0

自定义类型 //将NewString定义为string类型 type NewString string类型别名 type byte = uint8 type rune = int32go 结构体 Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体 定义结构体 type StructName struct {field1 fieldTypefield2 fieldType… }type person struct {name stringcity stringage int8

Go

手撸golang etcd raft协议之7

53 0

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

Go

go 语言学习之初步认识

56 0

总所周知,go语言是google公司开发的语言。那么它有什么特点呢1、自带垃圾回收机制。a、内存自动回收,再也不需要开发人员管理内存。b、开发人员专注业务实现,降低了心智负担。c、只需要new分配内存,不需要释放。2、天然并发,go语言是天然支持多并发的。a、从语言层面支持并发,非常简单。b、goroute,轻量级线程,创建成千上万个goroute成为可能。c、基于CSP(Communicating Sequential Process) 模型实现func main() {  go fmt.Println

Go

golang线程池【简易版】

168 0

先上代码,有兴趣的可以跑一下可以实现在有限的线程里执行多个任务,控制内存使用,防止内存飙高package mainimport ("context""fmt""strconv""sync""time")// 定义静态变量 用于外部访问内部方法var pool *_Pool// 定义空结构体,相当于类,和下面组合New方法起来就是pool类的静态方法type _Pool struct { }// 定义接口 可传任意参数type TaskFunc func(args ...interface{})// 定义任

Go

我是如何把5万行C++代码移植到Go的?

66 0

前 言从商业角度来看,这个项目是成功的:重写工作提前完成;性能在可接受的范围之内;并且整体代码量不超过 1W 行(代码量的剧减主要是因为重写团队删除了一些过时的或者不需要的特性)。但从开发者的角度来看,作者认为结果并不是最优的。Go 并不支持参数多态,作者因此使用了两到三倍的代码来实现类似功能。其中一部分是为了保障类型安全:Go 强制开发者在类型修饰和类型安全之间做出取舍,作者选择了一个比较均衡的实现。总的来说,如果需要一般的类型安全,那么相对少的代码就可以实现,而如果需要更好的类型安全,则需要更多的

Go

leetcode 最接近目标值的子序列和 golang

76 0

1755. 最接近目标值的子序列和 由于量级在40,所以单纯的dfs会出问题,所以需要把数组一分为2。然后对得到的数组排序,然后问题就转变为求 2个数组的加和问题。数组排序 一个从大到小,一个从小到大。求最接近目标的值即可。func minAbsDifference(nums []int, goal int) int {ans := math.MaxInt32n := len(nums)m := map[int]bool{}dfs(nums[:n/2], 0, m)A := make([]int, 0,