golang快速入门[5.2]-go语言是如何运行的-内存概述

前文golang快速入门[2.1]-go语言开发环境配置-windowsgolang快速入门[2.2]-go语言开发环境配置-macOSgolang快速入门[2.3]-go语言开发环境配置-linuxgolang快速入门[3]-go语言helloworldgolang快速入门[4]-go语言如何编译为机器码golang快速入门[5.1]-go语言是如何运行的-链接器前言总的来说一个程序的生命周期可以概括为: 编写代码 => 编译 => 链接 => 加载到内存 => 执行在上一篇文章中,我们详细介...阅读全文

51CTO博客 2020-02-19 15:18:18 jonson_jackson

从游击队到正规军(三):基于Go的马蜂窝旅游网分布式IM系统技术实践

本文由马蜂窝技术团队电商交易基础平台研发工程师"Anti Walker"原创分享。 一、引言 即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商。 从商品复杂性来看,一个旅游商品可能会包括用户在未来一段时间的衣、食、住、行等方方面面。从消费金额来看,往往单次消费额度较大。对目的地的陌生、在行程中可能的问题,这些因素使用户在购买前、中、后都存在和商家沟通的强烈需求。可以说,一个好用的 IM 可以在一定程度上对企业电商业务的 GMV 起到促进作用。 本文我们将结合马蜂窝旅游电商IM系统的发...阅读全文

Segmentfault 2020-02-22 20:32:34 JackJiang

ETCD探索

ETCD探索 梗概 这篇文章旨在从源码角度分析ETCD MVCC、Lease、Watch的实现,帮助我们更好的使用ETCD。 ETCD是什么? 这是ETCD官网给出的解释,ETCD是一个KV存储。现在有太多的KV存储中间件,我们为什么要选择ETCD呢?原因就是这句话:"distributed", "reliable",ETCD是一个分布式的、可靠的KV存储。相比于Redis,ETDC不够快,但足够安全,可靠。每一个中间件都有自己的特点,我选择ETCD有两个原因: ETCD是GO写的,所以GO用起...阅读全文

Segmentfault 2020-02-22 20:32:34 HammerMax

ETCD探索-Lease

ETCD探索-Lease 梗概 租约,是ETCD的重要特性,用于实现key定时删除功能。与Redis的定时删除功能基本一致。 猜想 我们通常是这么使用Lease的,首先申请一个租约:lease,然后将这个租约赋给一对KeyValue。ETCD-Lease的实现不难,在讨论怎么实现之前,可以先猜测下。我的直观想法: func putWithLease(key string, value string, ttl int) { go func() { time.Sleep(ttl * time.Sec...阅读全文

Segmentfault 2020-02-22 20:32:33 HammerMax

ETCD探索-Watch

ETCD探索-Watch 梗概 watch是mvcc包中的一个功能,之所以拿出来说,是因为它确实有很重的逻辑。watch是监听一个或一组key,key的任何变化都会发出消息。某种意义上讲,这就是发布订阅模式。 对比 既然Watch机制就是发布订阅模式,我们通过对比Kafka,来更深入了解Watch。首先说明结论: ETCD没有消费者组的概念,所以不能代替Kafka 对比其他方面呢: ETCD Kafka 消费方式 监听一个Key 订阅一个Topic 生产方式 Put(Key, Value) Pr...阅读全文

Segmentfault 2020-02-22 10:32:34 HammerMax

ETCD探索-MVCC

ETCD探索-MVCC MVCC MVCC模块ETCD的存储模块,是ETCD核心模块。 作为一个开源项目,其代码的封装是值得我们学习的。MVCC作为底层模块,对上层提供统一的方法,而这些方法都定义在kv.go这个文件中,很像一个头文件(.h)。我们可以只看kv.go以及配合kv_test.go就可以知道mvcc包是怎么用的。 kv.go type KV interface { ReadView WriteView // Read creates a read transaction. Read(...阅读全文

Segmentfault 2020-02-21 17:32:35 HammerMax

Go语言之父详述切片与数组的不同

切片是Go 语言核心的数据结构,然而刚接触 Go 的程序员经常在切片的工作方式和行为表现上被绊倒。比如,明明说切片是引用类型但在函数内对其做的更改有时候却保留不下来,有时候却可以。究其原因是因为我们很多人用其他语言的思维来尝试猜测 Go 语言中切片的行为,切片这个内置类型在 Go 语言底层有其单独的类型定义,而不是我们通常理解的其他语言中数组的概念。 文章翻译自罗伯·派克发布在 Go Blog 中的文章,文中详述了切片是如何被设计出来的以及其与数组的关联和区别,以及内置append函数的实现细节...阅读全文

掘金 2020年02月19日 kevinyan

leetcode_1207

Golang: 思路:先对数组进行排序,然后计算每个元素出现了几次,存进map里,注意,这里map只是当作一个set来使用的,判断有没有出现重复而已。 代码如下: func uniqueOccurrences(arr []int) bool { if len(arr)<=1 { return true } sort.Ints(arr) m:=make(map[int]int) temp:=1 for i:=1;i<len(arr);i++{ if arr[i]!=arr[i-1] { if _,...阅读全文

简书 2020-02-19 15:32:51 淳属虚构

leetcode_1200

Golang: 思路:这题稍微抓住一个点,在一个有序数组里,最小元素差总是出现在两个相邻的元素间,于是这题就变成了,排序,然后一次遍历。 代码如下: func minimumAbsDifference(arr []int) [][]int { sort.Ints(arr) min:=arr[1]-arr[0] var res [][]int for i:=1;i<len(arr);i++{ if arr[i]-arr[i-1]<min { min=arr[i]-arr[i-1] res=[][]...阅读全文

简书 2020-02-19 15:32:51 淳属虚构

leetcode_1189

Golang: 思路:这个,建立个数组,对应'a','b','l','o','n',每当出现'a','b','n'时,对应数组位置加二,出现'l','o'时,对应数组位置加一,然后遍历数组,找到最小值,除以2即可 代码如下: func maxNumberOfBalloons(text string) int { res:=make([]int,5) for i:=0;i<len(text);i++{ switch text[i] { case 'b': res[0]+=2 case 'a': r...阅读全文

简书 2020-02-19 15:32:50 淳属虚构

leetcode_1033

Golang: 思路:直接把我的题解搬上来吧 对abc进行排序,假定排完序后abc依次递增 条件1:b-a=c-b=1时,最小移动步数为0 条件2:不满足条件1, 那么看下b-a或者c-b有没有小于等于2的,有,那么最小移动步数为1 条件3:不满足条件1 2,那么最小移动步数为2 最大移动步数: 注意,这里是我不太理解的。我觉得以我对题意的理解,这题最大步数不是这么算的,比如 a=0,b=4,c=14 我可以先将a移动到7的位置,移动次数为7,移动后,位置变成[4,7,14] 再将4移动到10,...阅读全文

简书 2020-02-19 15:32:48 淳属虚构

leetcode_1030

Golang: 思路:遍历所有可能出现的r和c,求出曼哈顿距离存进map里,key为曼哈顿距离,value为一个二维数组。全部遍历完成后,根据key值递增,取相应key下的二维数组,全部导进res中,最后返回res 代码如下: func allCellsDistOrder(R int, C int, r0 int, c0 int) [][]int { var res [][]int mp:=make(map[int][][]int) for i:=0;i<R;i++{ for j:=0;j<C;...阅读全文

简书 2020-02-19 15:32:47 淳属虚构

leetcode_1029

Golang: 思路:还是照抄我的题解。 这题题意很明显是贪心了,那么以什么作为尺度呢? 毫无疑问的,应该是一个人去A点和去B点的花费之差 简单来说,我们看[1,1000],那么这个人应该去A点,因为会便宜999元 再来看[10,20],[1,1000],那么第二个人应该去A点,第一个人去B点。因为第一个人去A去B最多便宜10元,第二个人去A去B则可能便宜999元,这就是贪心在这一题的尺度了。 代码如下: type intS [][]int func (s intS) Len() int { r...阅读全文

简书 2020-02-19 15:32:46 淳属虚构

Golang源码分析之sort

排序是工程中必不可少的功能,很多编程语言SDK都提供了排序相关的实现。作为软件工程师,我们在学习各类排序算法的同时,是否有思考过,如何去实现一个工业级的排序算法?如果你是Go语言的作者之一,该如何去实现一种能适应多种情况的排序算法? Go SDK中排序相关的实现主要在sort/sort.go中,本文主要基于该文件进行相关实现的分析。 首先来看看Go对排序接口的定义,利用Go的interface特性可以轻松实现多种数据类型的排序功能。想要调用sort包的排序功能我们需要实现这个排序接口,排序接口主...阅读全文

golang go mod 替换指定版本

之前在项目中遇到过etcd的版本不一致, 导致无法编译. 最终是因为版本不一致的问题. https://segmentfault.com/q/1010000021762281 go mod替换版本 先删除vendor: rm -rf vendor 或手动删除 1.再替版本: go mod edit -require=google.golang.org/grpc@v1.26.0 1.下载指定版本v1.26.0: go get -u -x google.golang.org/grpc@v1.26.0...阅读全文

简书 2020-02-19 15:32:44 百里江山

golang快速入门[5.2]-go语言是如何运行的-内存概述

前文 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码 golang快速入门[5.1]-go语言是如何运行的-链接器 前言 总的来说一个程序的生命周期可以概括为: 编写代码 => 编译 => 链接 => 加载到内存 => 执行 在上一篇...阅读全文

简书 2020-02-19 15:32:43 唯识相链2

Go语言之父详述切片与数组的不同

切片是Go 语言核心的数据结构,然而刚接触 Go 的程序员经常在切片的工作方式和行为表现上被绊倒。比如,明明说切片是引用类型但在函数内对其做的更改有时候却保留不下来,有时候却可以。究其原因是因为我们很多人用其他语言的思维来尝试猜测 Go 语言中切片的行为,切片这个内置类型在 Go 语言底层有其单独的类型定义,而不是我们通常理解的其他语言中数组的概念。 文章翻译自罗伯·派克发布在 Go Blog 中的文章,文中详述了切片是如何被设计出来的以及其与数组的关联和区别,以及内置append函数的实现细节...阅读全文

Segmentfault 2020-02-21 12:32:34 Kevin

Dig101:Go之聊聊struct的内存对齐

Dig101: dig more, simplified more and know more 经过前边几篇文章,相信你也发现了,struct几乎无处不在。 string,slice和map底层都用到了struct。 今天我们来重点关注下struct的内存对齐, 理解它,对更好的运用struct和读懂一些源码库的实现会有很大的帮助。 在此之前,我们先明确几个术语,便于后续分析。 字(word) 是用于表示其自然的数据单位,也叫machine word。字是电脑用来一次性处理事务的一个固定长度。 ...阅读全文

掘金 2020年02月18日 newbmiao

Dig101:Go之for-range排坑指南

好久没写了,打算今年做个Dig101系列,挖一挖技术背后的故事。 Dig101: dig more, simplified more and know more golang常用的遍历方式,有两种: for 和 for-range。而for-range使用中有些坑常会遇到,今天我们一起来捋一捋。 0x01 遍历取不到所有元素指针? 如下代码想从数组遍历获取一个指针元素切片集合 arr := [2]int{1, 2} res := []*int{} for _, v := range arr { ...阅读全文

Segmentfault 2020-02-21 10:32:34 newbmiao

Hyperledger Fabric链码开发的8条军规

我相信智能合约(链码)是Hyperledger Fabric区块链网络的核心。正确开发 链码可以真正发挥一个安全区块链的优势,反之则会带来 灾难性的后果。在这篇文章里我不打算探讨Hyperledger Fabric链码设计的特定模式的 好与坏,而是希望分享我在开发若干Hyperledger Fabric概念验证应用过程中 总结的一些基本准则。 > Hyperledger Fabric区块链开发教程: [Node.js](http://xc.hubwiz.com/course/5c...阅读全文

Go语言中文网 2020-02-19 09:35:08 ezpod