golang 错误处理

带你熟悉golang error相关的知识. 0.引言 注:本文中的所有代码都在:https://github.com/driftingboy/advance-go/tree/master/master_go/erroruse 1.Error vs Exception1.1 Error本质 Error本质上是一个接口 type error interface{ Error...

go: 如何编写一个正确的udp服务端

udp的服务端有一个大坑,即如果收包不及时,在系统缓冲写满后,将大量丢包。 在网上通常的示例中,一般在for循环中执行操作逻辑。这在生产环境将是一个隐患。是的,俺就翻车了。 go强大简易的并发能力可以用在处理udp数据上。 PoolSizeUDP := 1472 listener, err := net.ListenUDP("udp", &net.UDPAddr{ ...

几百行代码实现一个 JSON 解析器

前言 之前在写 gscript时我就在想有没有利用编译原理实现一个更实际工具?毕竟真写一个语言的难度不低,并且也很难真的应用起来。 一次无意间看到有人提起 JSON 解析器,这类工具充斥着我们的日常开发,运用非常广泛。 以前我也有思考过它是如何实现的,过程中一旦和编译原理扯上关系就不由自主的劝退了;但经过这段时间的实践我发现实现一个 JSON 解析器似乎也不困难,只是运用到了编...

Go简单实现协程池

首先就是进程、线程、协程讲解老三样。 进程: 本质上是一个独立执行的程序,进程是操作系统进行资源分配和调度的基本概念,操作系统进行资源分配和调度的一个独立单位。 线程: 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程中可以并发多个线程,每条线程执行不同的任务ÿ...

Alibaba\u002FIOC-golang 正式开源 ——打造服务于go开发者的IOC框架

简介: IOC(inversion of control)即控制反转,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。IOC-golang 是一款服务于Go语言开发者的依赖注入框架,基于控制反转思路,方便开发人员搭建任何 Go 应用。在本文中,我不会罗列这个项目的种种功能与实现,而是站在开发者的角度,谈一谈我认为 Go 应用开发的“理想姿态”。 作者 | ...

数据采集之:巧用布隆过滤器提取数据摘要

概览 在telemetry采集中,由于数据量极大,一般采用分布式架构;使用消息队列来进行各系统的解耦。有系统如下: 设备将各类数据上报给采集器,采集器充当格式转换的角色。将各类不同的设备数据转换为统一的格式。 采集器将数据写入到消息队列中,后端的其它服务,如“分析”,“告警”等服务从消息队列中取数据,进行相关的实际业务。 采集器转换后的的统一格式如下: syntax = ...

关于 GIN 的路由树

GIN 是一个 golang 常用的 Web 框架,它对 API 比较友好,源码注释也很明确明确,使用起来快速灵活,还有极高的容错率。标题中的路由我们可以简单理解为在浏览器中输入的页面地址,而“树”则是 一种优化的数据结构。 因为在 GIN 这个 Web 框架中的路由树是前缀树,所以我们今天会围绕前缀树来讲解。 什么是前缀树 前缀树其实就是 Tire 树,是哈希树的变种,通常大...

Golang 实现 Redis(9): 使用GeoHash 搜索附近的人

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情 本文是使用 golang 实现 redis 系列的第九篇,主要介绍如何使用 GeoHash 实现搜索附近的人。 搜索附近的POI是一个非常常见的功能,它的技术难点在于地理位置是二维的(经纬度)而我们常用的索引(无论是B树、红黑树还是跳表)都是一维的。GeoHash 算法的本质就是将二...

golang的defer踩坑汇总

原文链接:http://www.zhoubotong.site/post/50.html defer语句用于延迟函数调用,每次会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行。延迟函数可以有参数: 延迟函数的参数在defer语句出现时就已确定下来(传值的就是当前值) return先赋值(对于命名返回值),然后执行defer,最后函数返回 延迟函数执行按后进先...

rpc的正确打开方式|读懂Go原生net/rpc包

前言 最近在阅读字节跳动开源RPC框架Kitex的源码,分析了如何借助命令行,由一个IDL文件,生成client和server的脚手架代码,也分析了Kitex的日志组件klog。当然Kitex还有许多其他组件:服务注册、发现、负载均衡、熔断、限流等等,后续我也会继续分析。 我希望借助这篇文章,用尽可能少的语言,配合分析Go原生net/rpc包的部分核心代码,帮助你贯通RPC的知...