使用Go基于WebSocket构建千万级视频直播弹幕系统

(1)业务复杂度介绍 开门见山,假设一个直播间同时500W人在线,那么1秒钟1000条弹幕,那么弹幕系统的推送频率就是:500W * 1000条/秒=50亿条/秒,想想B站2019跨年晚会那次弹幕系统得是多么的NB,况且一个大型网站不可能只有一个直播间! 使用Go做WebSocket开发无非就是三种情况: 使用Go原生自带的库,也就是golang.org/x/net,但是这个官方库真是出了奇Bug多 使用GitHub大佬gorilla/websocket库,可以结合到某些Web开发框架,比如Gi...阅读全文

51CTO博客 2020-07-06 17:26:14 BlueMiaomiao

打造超级舒适的Go开发环境之VIM配置

在阅读本文之前,你需要: 准备一个UNIX like的操作系统一个可以跨过山和大海的代-理话不多说,开始吧~ (1)下载必要的Go工具链go get -v github.com/mdempsky/gocodego get -v github.com/ramya-rao-a/go-outlinego get -v github.com/acroca/go-symbolsgo get -v github.com/uudashr/gopkgsgo get -v golang.org/x/tools/c...阅读全文

51CTO博客 2020-07-06 13:04:15 朴所罗门

Sentinel Go 0.4.0 发布,支持热点流量防护能力

Sentinel 是阿里巴巴开源的,面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统自适应保护等多个维度来帮助开发者保障微服务的稳定性。Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀、冷启动、消息削峰填谷、集群流量控制、实时熔断下游不可用服务等,是保障微服务高可用的利器,原生支持 Java/Go/C++ 等多种语言,并且提供 Istio/Envoy/SOFA MOSN 全局流控支持来为 Service Mesh 提供高可用防...阅读全文

51CTO博客 2020-07-06 13:01:36 阿里系统软件技术

学习编程,python和GO语言应该选择哪一个?

IT行业是很多人都认为非常受欢迎的领域,因为前景好、待遇高、从业岗位多,越来越多人都想要学习编程。那么编程语言众多,在选择的时候很多人都会在python和GO语言进行徘徊,该如何选择呢? python: python是发展最快的编程语言之一,python偏爱简单、易读的代码,使用这些功能吸引了很多不愿意学习复杂编程语言的人,通过使用python,可以非常方便将我们的思想转变为实际代码。 python主要特点就是一个解释型语言,因此在执行之前,无需将python编译成机器代码。但是代码的解释通常需...阅读全文

51CTO博客 2020-07-06 20:57:17 老男孩IT

新书《Go语言编程之旅:一起用Go做项目》出版啦!

最早从我在 Segmentfault 开始写技术文章起,不知不觉近三年过去了,咨询和催我出书和读者逐年递增,在 2019 年算是达到一个高峰。当然,综合考虑下我也是一直拒绝的,觉得火候还不够。 直至 2019.09 月,polaris 主动找到了我,说有事情想找我商量,本着 “如果你在纠结一件事情做还是不做,不如先做了看看结果,至少不会后悔” 的想法,更何况是长期被 Ping,因此我一口答应下来,故事自此开始了。 本书定位 本书不直接介绍 Go 语言的语法基础,内容将面向项目实践,同时会针对核心...阅读全文

Segmentfault 2020-07-13 09:32:32 煎鱼

web3.js支持SimpleChain跨链调用

SimpleChain的跨链协议已经对外开放很久了,很多应用也已经慢慢支持Simplechain的跨链。最近社区开发者web3.js中集成了Simplechain的跨链接口,开发者只需用`npm`安装包文件。参考原生 [RPC接口](https://simplechainfans.github.io/document/en/23_crossChainApi.html)的参数,就可以快速上手接入Simplechain跨链。下面是详细流程; ### 查看RPC接口 首先我们需要熟悉Sim...阅读全文

Go语言中文网 2020-07-06 17:40:45 SimpleChain

golang面试题二之interface

interface和nil golang的nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值,在golang中,nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果未遵循这个规则,则会引发panic. 在底层,interface作为两个成员来实现,一个类型和一个值.接下来通过编写测试代码来看看interface倒底是什么。 测试代码一: package main import ( "fmt" "reflect" ...阅读全文

简书 2020-07-06 15:33:12 stevenyeahnet

剖析 Cosmos SDK 应用程序,Part 2:模块与接口

引言区块链是由人类杰出科技成果组合而成的全新架构,对于生产关系的变革有巨大的潜力。数与科技团队致力于在实践中探索更加开放的加密经济基础设施,我们将逐步拆解主流区块链的底层技术细节,并且尝试将碎片化的区块链知识整理成树状知识图谱分享给社区,也欢迎有兴趣的朋友一起加入。Cosmos是一套成熟且高可用区块链开发框架,拥有模块化设计、基于Golang开发、支持跨链协议等特点,是目前比较主流的区块链开发框架。通过Cosmos SDK,开发者可以快速构建出属于自己的区块链,高效地进行一系列个性化开发。本文为...阅读全文

简书 2020-07-06 15:33:12 数与科技

【CMake 系列】(四)用 GoogleTest 测试

今天我们来说说,CMake 测试。 不过,其实我们还是在说 C++ 的测试。 CMake 给我们提供了完善的测试支持,比如它有一个专门的模块 CTest。 CMake 原生测试支持 CMake 原生支持的测试很简单,只有两个函数: enable_testing() add_test(NAME <name> COMMAND <command> [<arg>...] [CONFIGURATIONS <config>...] [WORKING_DIRECTORY <dir>] [COMMAND_EXP...阅读全文

简书 2020-07-06 15:33:05 xizhibei

golang入门到放弃:2.匿名函数、闭包、递归函数

匿名函数 Go语言支持匿名函数,即函数可以像普通变量一样被传递或使用。 eg1 func main() { a:=10 b:=5 //将闭包函数类型赋值给f f:=func (c int,d int)int { return c+d } fmt.Println(f(a,b))//15 fmt.Printf("%T",f,)//func(int, int) int fmt.Printf("%T",f(a,b))//int } eg2 func main() { //函数调用 将test2的返回值给...阅读全文

简书 2020-07-06 15:33:05 不留余白

Golang设计模式整理

UML类图 研究设计模式首先要掌握类图,类图也就是表达模型之前的关系。 UML—Unified modeling language UML (统一建模语言) image.png image.png 设计原则 先复习一下6大设计原则,对他们的理解 单一职责(SRP Single Responsibility Principle) 一个类或一个方法只有一个职责,尽量做到只有一个行为原因引起变化。 理解: 降低类的复杂度,一个类只负责一项职责。 提高类的可读性,可维护性 降低变更引起的风险 通常情况下...阅读全文

简书 2020-07-06 15:33:04 我就是小政政

Cosmos Transaction 生命周期

引言区块链是由人类杰出科技成果组合而成的全新架构,对于生产关系的变革有巨大的潜力。数与科技团队致力于在实践中探索更加开放的加密经济基础设施,我们将逐步拆解主流区块链的底层技术细节,并且尝试将碎片化的区块链知识整理成树状知识图谱分享给社区,也欢迎有兴趣的朋友一起加入。Cosmos是一套成熟且高可用区块链开发框架,拥有模块化设计、基于Golang开发、支持跨链协议等特点,是目前比较主流的区块链开发框架。通过Cosmos SDK,开发者可以快速构建出属于自己的区块链,高效地进行一系列个性化开发。本文为...阅读全文

简书 2020-07-06 15:33:01 数与科技

【golang】重视内存复用

在性能优化中,内存复用能减少内存申请与释放,提高性能,尤其在大量数据的重复声明中。在golang的内存复用有很多方法,重点在于怎么样避免新建对象,下面介绍简单但作用明显的复用方式: sync.pool的内存复用,常用于结构体对象复用 type User struct { Name string } var userPool = &sync.Pool{ New: func() interface{} { return &User{} }, } func GetUser() *User { retu...阅读全文

简书 2020-07-06 15:32:46 dongzaidong

指针,值类型, 内存布局

分析基本数据类型在内存布局 package main import "fmt" func main() { // 基本数据类型在内存布局 var i int = 10 // i 的地址是什么 &i fmt.Println("i的地址=", &i) } 分析指针数据类型在内存中布局 func main() { /* // 基本数据类型在内存布局 var i int = 10 // i 的地址是什么 &i fmt.Println("i的地址=", &i) */ i := 10 var ptr *in...阅读全文

Segmentfault 2020-07-13 08:32:32 code

字符串常用的系统函数功能介绍

字符串在我们程序开发中使用比较多,下面总结常用的20多种常用使用案例,函数介绍,大致介绍了strings与strconv包 import "strings" strings包实现了用于操作字符的简单函数。 import "strconv" strconv包实现了基本数据类型和其字符串表示的相互转换。 字符串中常用的系统函数阅读全文

Segmentfault 2020-07-12 16:32:32 code

仿阿里系优酷网-企业级Go改造PHP项目踩坑避坑指北

​仿阿里系优酷网-企业级Go改造PHP项目踩坑避坑指北无密 【点击下载】互联网早期为快速上线,不少网站基于PHP构建,如:阿里的优酷网、Google的YouTube等,但随业务发展,出现性能等问题。当下,5G激发视频行业发展,故本课以 “优酷网”为蓝本 ,先基于PHP构建“慕优酷网”, 后进行Go改造。捞干讲:课程赠送从0到1的PHP源码。核心是:精讲从1到N的Go改造踩坑避坑点,掌握三大性能利器:Redis、RabbitMQ、Elasticsearch,改造完压测对比,看得见的性能提升。还原真...阅读全文

Go语言中文网 2020-07-06 14:16:47 tiantianxiangsh 等

Sentinel Go 0.4.0 发布,支持热点流量防护能力

Sentinel 是阿里巴巴开源的,面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统自适应保护等多个维度来帮助开发者保障微服务的稳定性。Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀、冷启动、消息削峰填谷、集群流量控制、实时熔断下游不可用服务等,是保障微服务高可用的利器,原生支持 Java/Go/C++ 等多种语言,并且提供 Istio/Envoy/SOFA MOSN 全局流控支持来为 Service Mesh 提供高可用防...阅读全文

Segmentfault 2020-07-11 10:32:37 阿里巴巴云原生

Go Search Extension,快速在地址栏搜索 Go 文档的开源浏览器插件

Go Search Extension是一款可以在浏览器地址栏快速、方便、高效地搜索 Go 文档、第三方库的浏览器插件,支持 Chrome/Firefox/Edge 。类似于 Rust 社区的Rust Search Extension。下载地址:Chrome Web StoreFirefoxMicrosoft Edge主要功能:搜索 Go 标准库文档可通过关键词搜索 package 、func 、interface,快速查看其定义和描述,也可选中并跳转到文档页面查看具体说明。​搜索热门的 pac...阅读全文

Go语言中文网 2020-07-06 10:17:25 Kathygo