Go语言中文网 为您找到相关结果 67

Golang 优化之路——Cantor pair

写在前面 某一种对象是通过两个ID唯一确定的,如何处理这种数据结构以便快速查找以及节约内存?先说一种笨方法——用字符串来处理。这是比较容易想到的(我觉得一般最容易想到的也是最简单粗暴的方法都是用字符串来搞搞搞)。 fmt.Sprintf("%d_%d", id1, id2) 这样就成了。存储的时候用字符串来保存,查询比较的时候用字符串的方法来计算。当然,把数字当作字符串来保存和计算本身就是极其浪费内存和CPU的。 Cantor pairing function 简介 康托尔配对 - Cantor pairing function,是一种将两个自然数转成唯一一个自然数的方法。具体原理我就不说了,我也看不懂。。。简单地说: 只支持自然数。自然数是整数(自然数包括正整数和零); 支持反解; f(k...阅读全文

Go (interface)接口

// interface.go package main import ( "fmt" ) type Phone interface { call() } type NokiaPhone struct { } type IPhone struct { } type Android struct { } func (nokia NokiaPhone) call() { fmt.Println("I am Nokia!") } func (ios IPhone) call() { fmt.Println("I am IPhone!") } func (and Android) call() { fmt.Println("I am Android!") } func main() { var ph...阅读全文

博文 2017-05-06 15:00:35 痞子汤

golang的Channel

golang的Channel Channel 是 golang 一个非常重要的概念,如果你是刚开始使用 golang 的开发者,你可能还没有真正接触这一概念,本篇我们将分析 golang 的Channel 1. 引入 要讲 Channel 就避不开 Goroutine -- 协程。闲话不说, 直接上个例子 Goroutine demo: package main import ( "fmt" "time" ) func main() { origin := 1 go doSomeCompute(origin) time.Sleep(5 * time.Second) } func doSomeCompute(num int) { result := num * 2 fmt.Println(re...阅读全文

图解kubernetes scheduler基于map/reduce模式实现优选阶段

优选阶段通过分map/reduce模式来实现多个node和多种算法的并行计算,并且通过基于二级索引来设计最终的存储结果,从而达到整个计算过程中的无锁设计,同时为了保证分配的随机性,针对同等优先级的采用了随机的方式来进行最终节点的分配,如果大家后续有类似的需求,不妨可以借鉴借鉴 1. 设计基础 1.1 两阶段: 单点与聚合 在进行优选的时候,除了最后一次计算,在进行针对单个算法的计算的时候,会分为两个阶段:单点和聚合 在单点阶段,会根据当前算法针对单个node计算在聚合阶段,则会根据当前单点阶段计算完成后,来进行聚合 1.2 并行: 节点与算法 单点和聚合两阶段在计算的时候,都是并行的,但是对象则不同,其中单点阶段并行是针对单个node的计算,而聚合阶段则是针对算法级别的计算,通过这种设计分离...阅读全文

博文 2020-01-17 18:34:19 代码仔

golang 实现递归

package main import "fmt" func Recursive(n int) int {if n == 0 {return 1}//相当于10987654321 return n Recursive(n-1)}func main() {fmt.Println(Recursive(10))} 执行结果:sf@SFdeMacBook-Pro  ~/Documents/project/src/test  go build Recursive.gosf@SFdeMacBook-Pro  ~/Documents/project/src/test  ./Recursive362880...阅读全文

博文 2018-09-21 22:36:39 IT职场小白

Go语言2018年度调查结果报告

感谢 这篇文章总结了我们2018用户调查的结果,与之前的2016和2017年的调查结果做了对比。 2018年我们调查了来自103个国家的 5,883 个调查受访者。非常感谢提供反馈的每一个人,这个调查可以帮助塑造Go的未来。 调查结果摘要 首先,一半的调查受访者使用Go语言作为他们日常使用的一部分。这一年我们看到了那些使用Go作为他们工作一部分的受访者们在数量上有了非常大的增长。 Go最常用做 API/RPC 服务和 CLI 工具。自动化任务虽然不像CLI工具和API服务那么常见,但却是Go的一个快速发展的领域。 Web开发仍然是最常见到的领域,而 DevOps 的年增长率最高,也是现在第二常见到的领域。 绝大多数受访者表示 Go 是他们最优先选择的编程语言,尽管普遍感觉不如至少一种其他语言...阅读全文

博文 2019-03-30 17:34:39 如来神掌

Golang多线程 计算单个goroutine的大小

package main import ( "fmt" "runtime" "sync" ) func main() { memConsumed := func() uint64 { runtime.GC() var s runtime.MemStats runtime.ReadMemStats(&s) return s.Sys } var c <-chan interface{} var wg sync.WaitGroup noop := func() { wg.Done() <-c } const numGoroutines = 1e4 wg.Add(numGoroutines) before := memConsumed() for i := numGoroutines; i > 0;...阅读全文

博文 2019-06-08 05:32:41 FredricZhu

官方博文:2019 年 Go 开发者调查结果

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言Todd Kulesza 2020-04-20概览、感谢 首先,我要非常感谢参与本次调查的数千名 Go 开发人员。在 2019 年,我们收到了 10,975 份回复,几乎是去年的两倍![1]我要代表团队的其他成员,充分强调您花时间和精力向我们介绍您在 Go 方面的经验,我们对此深表感谢。谢谢!关于前几年调查说明 敏锐的读者可能会注意到,我们每年的比较与我们过去分享的数字不太吻合。原因是从 2016 年至 2018 年,我们使用开始调查的总人数作为分母来计算每个问题的百分比。尽管这很不错而且很一致,但它忽略了并非每个人都会完成调查的事实——多达 40% 的参与者在到达最后一页之前就停止了调查,这意味着在调查的后面出现的...阅读全文

博文 2020-04-26 10:36:01 Go语言中文网

Golang - concurrency 之 Goroutines

A goroutine is a function that is capable of running concurrently with other functions. To create a goroutine we use the keyword go followed by a function invocation: package main import "fmt" func f(n int) { for i := 0; i < 10; i++ { fmt.Println(n, ":", i) } } func main() { go f(0) var input string fmt.Scanln(&input) } 结果: 0 : 0 0 : 1 多次运行的结果 0 : ...阅读全文

博文 2017-11-16 16:00:10 joewan

golang rabbitmq的使用(五)

先说一个实际的业务场景:Client端有一个请求需要进行耗时处理或者查询,这个处理在Server端做。Server 端处理完后通知给请求的Client端。这种场景可以称之为RPC(Remote Procedure Call) 有两个点说明一下: <1>Client端发送请求给Server端可以简单定义一个Queue。Client作为Producer发布消息,Server端作为Cosumer消费消息 <2>Server端处理完耗时处理后需要将处理结果返回给请求的客户端。 可以在Client声明一个不指定名称的Queue,系统会自动生成一个随机名称的Queue。将Queue的名称在publish是发送给Server端 因为Server端要将处理结果返回给对应的请求,所以在Client端需要生成一...阅读全文

博文 2019-11-20 22:03:04 麦穗儿

Supervisor 的使用和进阶 (4) - supervisor Event 的使用

本文主要介绍 supervisor Event 的功能。 supervisor 作为一个进程管理工具,在 3.0 版本之后,新增了 Event 的高级特性, 主要用于做(进程启动、退出、失败等)事件告警服务。 Event 特性是将监听的服务(listener)注册到supervisord中,当supervisord监听到相应事件时,将事件信息推送给监听对应事件的listener。 事件类型 Event 可以设置 27 种事件类型,可以分为如下几类: 1. 监控进程状态转移事件; 2. 监控进程状态日志变更事件; 3. 进程组中进程添加删除事件; 4. supervisord 进程本身日志变更事件; 5. supervisord 进程本身状态变更的事件; 6. 定时触发事件。 事件可以被单独监...阅读全文

golang中接口的面向对象(二)--继承

在上一节 golang中接口的面向对象(一)--多态特征中,我们学习了galang中的多态,参考https://blog.51cto.com/91235688/2499405 继承那么这一节中,我们继续用上一节中的例子,来学习继承。我们修改上一节中的示例代码,如下所示:type geometry interface { sayHi() //geometry 只有一个方法sayHi()}type rect struct { geometry //这里使用匿名字段,使得rect 继承了 geometry 类型 len, wid float32}func (r rect) sayHi() { //这里rect 作为继承者,重写了sayHi方法 fmt.Println("i am a rect")}...阅读全文

博文 2020-05-30 23:34:00 roddger

go 的程序控制

go 的程序控制大致分成三种 if for case 语句 1、 if 循环 if-else 语句之间可以有任意数量的 else if。条件判断顺序是从上到下。如果 if 或 else if 条件判断的结果为真,则执行相应的代码块。 如果没有条件为真,则 else 代码块被执行。 语法结构 if condition{}else if condition{ }else{ } 定义示列 package main import "fmt" func iftest() { score :=61 if score > 60{ fmt.Println("成绩合格") } else if score >90{ fmt.Println("成绩优秀") }else if score<0 { fmt.Print...阅读全文

博文 2020-01-11 17:33:11 水滴石川1