[置顶]【GO语言中文网】微信公众号 - 社群 - 知识星球 欢迎各位的加入!!!(我们会努力优化的更好)
公众号:  QQ群号: ...阅读全文
公众号:  QQ群号: ...阅读全文
ElasticSearch+Spark 构建高匹配度搜索服务+千人千面推荐系统 【点击下载】基于大众点评搜索以及推荐业务,从企业实际项目落地实践的角度出发,在使用SpringBoot加mybatis完成用户登录、注册、商家入驻以及结合前端模板搭建运营后台门店服务管理功能后,借助ElasticSearch的最新版本ES7逐步迭代,完成高相关性进阶搜索服务,并基于spark mllib2.4.4构建个性化千人千面推荐系统。适合人群想了解EasticSearch,对搜索推荐系统感兴趣,符合技术储备的...阅读全文
百万级高并发WebRTC流媒体服务器设计与开发 点击下载5G时代音视频为王,随着实时音视频应用的爆发,来自Google 的WebRTC成为了人们关注的焦点,但很多人却不知道如何使用WebRTC实现多人实时互动,本课就将围绕与浏览器互通、级联、可扩展等6大痛点手把手带你学习大负载、高并发、高性能 WebRTC 流媒体服务器的设计与开发,揭秘万人互动直播背后的深层奥秘,打造可负载百万用户量的企业级的流媒体服务器适合人群WebRTC开发人员想实现多方通信的开发人员音视频服务器开发人员服务端开发人员技...阅读全文
开一个系列坑,记录使用Go语言练习实现微服务工具链的过程,第一篇是蓝绿部署的实现。 蓝绿部署是不停老版本,部署新版本然后进行测试,确认OK,将流量切到新版本。 项目的git地址为 github.com/mikellxy/mk… (蓝绿部署的实现在api目录的deploy目录下) 一、定义项目 在蓝绿部署中,上线的过程中,不会停用老版本,而是另外部署新的服务来运行新版本,并导入测试流量进行测试。下文中,把一个项目正在对外提供服务的称作production服务,部署了新版本正在进行测试的称作stag...阅读全文
前言 Golang在并发编程上有两大利器,分别是channel和goroutine,这篇文章我们先聊聊channel。熟悉Golang的人都知道一句名言:“使用通信来共享内存,而不是通过共享内存来通信”。这句话有两层意思,Go语言确实在sync包中提供了传统的锁机制,但更推荐使用channel来解决并发问题。这篇文章会先从channel的用法、channel的原理两部分对channel做一个较为深入的探究。 channel用法 什么是channel 从字面上看,channel的意思大概就是管道的...阅读全文
etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,是目前容器编排领域火热的 Kubernetes(k8s) 内置的服务发现与节点一致性中间件,用于提供可靠的分布式键值(key-value)存储、配置共享和服务发现等功能。etcd 可以用于存储关键数据和实现分布式调度,在现代化的集群运行中能够起到关键性的作用。 etcd 基于 Raft 协议,通过复制日志文件的方式来保证数据的强一致性。在 etcd 之前,常用的是基于 Paxos 协议的 ZooKeeper。 etcd e...阅读全文
背景知识 什么是标记与清理, 什么是三色标记 我们从根数据出发(学名叫RootSet): 向前走第一轮, 得到如下结果: 直接引用根数据的变量包含有(A,F). 第一轮结束, 将ABC三个变量标记成灰色. 开始第二轮, 我们从A出发, 首先我们将A标记成黑色, 然后发现引用了A的有(B,C,D)两个变量, 这两个变量通过A间接引用了根数据, 因此也是有效的, 我们将DB标记成灰色; 我们使用同样的办法在刚刚的(F)变量上, 第二轮结束, 我们得到了(B,C,D)变量是有效的, 截止目前, 一共有...阅读全文
etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,是目前容器编排领域火热的 Kubernetes(k8s) 内置的服务发现与节点一致性中间件,用于提供可靠的分布式键值(key-value)存储、配置共享和服务发现等功能。etcd 可以用于存储关键数据和实现分布式调度,在现代化的集群运行中能够起到关键性的作用。 etcd 基于 Raft 协议,通过复制日志文件的方式来保证数据的强一致性。在 etcd 之前,常用的是基于 Paxos 协议的 ZooKeeper。 etcd 主...阅读全文
golang 的grpc库是 https://github.com/grpc/grpc-go grpc server端和服务端网络协议是在tcp基础上的 http2协议,http2协议负责grpc基础的数据传输、连接管理、流控等, 具体的业务层service 定义是基于 protobuf的 整个的网络过程和关键点如下图 grpc网络流程.png 说明: http2协议是支持在一个tcp连接上, client端同时发送多个request (不同request, streamid不同),不必等待se...阅读全文
channel的作用 channel被设计用来实现goroutine间的通信,按照golang的设计思想:以通信的方式共享内存。 channel的内存布局 例如如下代码中的make函数会在堆上分配一个runtime.hchan类型的数据结构,ch是存在于函数f栈帧上的一个指针,指向堆上的hchan数据结构。 func f() { ch := make(chan int) ... } 至于为什么是堆上的一个结构体:首先,要实现channel这样的复杂功能,肯定不是几个字节可以搞定的,所以需要一个s...阅读全文
ginprc golang gin 参数自动绑定工具 支持rpc自动映射 支持对象注册 支持注解路由 基于 go-gin 的 json restful 风格的golang基础库 自带请求参数过滤及绑定实现 binding:"required" validator 代码注册简单且支持多种注册方式 api接口说明 支持3种接口模式 func(gin.Context) //go-gin 原始接口 func(api.Context) //自定义的context类型 func(api.Context,re...阅读全文
## [ginprc](https://github.com/xxjwxc/ginrpc) [](https://github.com/avelino/awesome-go) ## golang gin 参数自动绑定工具 - 支持rpc自动映射 - 支持对象注册 - 支持注解路由 - 基于 [go-gin](https://github.com...阅读全文
在 Go 中使用 Socket.IO The WebSocket Protocol https://tools.ietf.org/html/rfc6455 https://github.com/googollee/go-socket.io https://godoc.org/github.com/googollee/go-socket.io https://godoc.org/github.com/gorilla/websocket Websocket Websocket是全双工的基于TCP层的...阅读全文
在java的gc中,主要有三种算法,即:标记-删除,标记-整理,复制,网上有很多资料介绍相关内容,其中标记主要是为了找到内存中不可达的对象,并将其回收。而gc过程中最关键的指标就是STW时间,如果STW过长,会影响整体程序的响应。 Serial Serial 采用单一线程进行GC。 特点:STW时间长,但是无线程切换开销,简单高效 ParNew ParNew 与Serial一样,只是在新生代采用并发gc CMS CMS CMS收集器主要用于老年代内存的回收,致力于降低STW时间,但是却拉长了gc...阅读全文
姓名:宫松涛学号:19021210927嵌牛导读:为大家详细讲解HTTP基础知识,让大家快速掌握。嵌牛鼻子:HTTP基础知识嵌牛提问:有哪些HTTP基础知识?转载源:你应该知道的HTTP基础知识嵌牛正文:本文主要内容:HTTP请求报文格式HTTP响应报文格式Header请求体的3种形式推荐调试工具HTTP的组成图示1. HTTP请求报文格式HTTP 的请求报文分为三个部分请求行、请求头和请求体,格式如图: HTTP请求报文格式注:部分文章也将HTTP请求报文分为两部分请求头和请求体,请求头的第一...阅读全文
本篇主要进行加密非流式 GRPC 的通信在字节层面的讨论,使用带 TLSv1.2 的 nginx 节点代理非加密的 golang 服务端节点,密钥交换使用椭圆曲线,在服务端使用自签名证书,不使用客户端证书,假设读者对 TLS 等已有基本的了解。 使用以下命令生成椭圆曲线密钥和服务端自签名证书: openssl ecparam -genkey -name secp256r1 | openssl ec -out hot.key -aes128 openssl req -new -x509 -days...阅读全文
作为有一些经验的Golang开发者,你可能意识到了Golang并没有max/min方法来返回给定的两个或多个整型数值中的最大值或最小值。其他语言通常会在核心库中提供这类方法。 你有没有想过为什么Golang没有这么做? Golang确实在math包中提供了max/min方法,但是仅用于对比float64类型。方法的签名如下: math.Min(float64, float64) float64 math.Max(float64, float64) float64 Golang为float64提供...阅读全文