202301-01 gRPC简介 NEW 简介gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,... Read More >
202201-19 如何从golang的字符串中找到表情符号? NEW 问题我想知道表情符号是否存在,并替换为字符串(HTML unicode)。(符文到字符串)例如,这是一个句子i like you hahahah 😀 hello.这就是结果。i like you hahahah 😀 hello.表情符号和表情符号位置是随机的。解决方案我们可以将字符串转换为[]rune,并将每个符文转换为ASCII或HTML实体packa... Read More >
202201-18 gorm中emoji表情入库乱码修复 NEW 背景新项目gin+gorm后端接口接收数据(包含emoji表情符号)后存入mysql 乱码乱码问题一般是下面几个方面造成的,我们依次检查数据库服务器编码检查 /etc/my.cnf 配置[client] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server = utf8mb4_unicode_ci ... Read More >
202201-17 Golang Context是好的设计吗? 1、What ContextContext是Golang官方定义的一个package,它定义了Context类型,里面包含了Deadline/Done/Err方法以及绑定到Context上的成员变量值Value,具体定义如下:type Context interface { // 返回Context的超时时间(超时返回场景) Deadline() (d... Read More >
202201-16 开放分布式追踪(OpenTracing)简介 分布式系统的运维挑战容器、Serverless 编程方式的诞生极大提升了软件交付与部署的效率。在架构的演化过程中,可以看到两个变化: 1. 应用架构开始从单体系统逐步转变为微服务,其中的业务逻辑随之而来就会变成微服务之间的调用与请求。 2. 资源角度来看,传统服务器这个物理单位也逐渐淡化,变成了看不见摸不到的虚拟资源模式。从以上两个变化可以看到这种弹性、标准化的架构背后,原先运维与诊断... Read More >
202201-15 golang分布式链路追踪系统-jaeger安装与简单使用 简介jaeger是一个比较有名的分布式链路追踪系统,底层用golang实现,兼容opentracing标准。 文档地址:docs github地址:github 官网:website blog:blog部署我们用docker部署,集成整套环境all-in-one,docker地址:https:/... Read More >
202201-14 golang内存对齐 unsafe.Sizeof(x)在Go语言中,我们可以通过 unsafe.Sizeof(x) 来确定一个变量占用的内存字节数(不包含 x 所指向的内容的大小)例如对于字符串数组,在64位机器上,unsafe.Sizeof() 返回的任意字符串数组大小为 24 字节,和其底层数据无关:func main() { s := []string{"1", "2", &qu... Read More >
202201-13 redis延迟队列golang高效实践 一、背景业务中经常会有这样的场景:到期后自动执行指定操作;查询某个任务是否完成,未完成等待一定时间再次查询;回调通知,当回调失败时,等待后重试;等等还有其他很多类似的场景。很多时候我们会直接通过一个本地定时器来帮我们完成这个任务。如果我们的系统是多实例分布式的,本地定时器就会面临很多问题,如:怎么保证重复处理的问题;统一管控的问题等等。面对本地定时器遇到的问题,我们可以使用分布式延迟队列来实现。这里介绍一种使用golang基于redis实现延迟队列的具体实践。二、实现原理1、... Read More >
202201-12 golang-websockets客户端实现和压测方法 简介使用到的包:github.com/gorilla/websocket案例package main import ( "fmt" "github.com/gorilla/websocket" "log" ... Read More >
202201-11 golang中redis对redigo的发布订阅机制的使用 redigo 对redis的订阅机制放在pubsub.go里面,PubSubConn封装Conn以实现订阅者提供简便方法。Subscribe,PSubscribe,Unsubscribe和PUnsubscribe方法发送和刷新订阅。receive方法将推送的消息转换对应的类型// Receive returns a pushed message as a Subscription, Me... Read More >
202201-10 gorilla/websocket包方法汇总 获取 Conn 实例的方法func (u *Upgrader) Upgrade(w http.ResponseWriter,r *http.Request,responseHeader http.Header)(*Conn , error) 方法 必须通过 Upgrader结构体的实例调用 方法必须传递 w http.ResponseWriter 和 r *http.Req... Read More >
202201-09 高效的IM长连接自适应心跳保活机制 认识长连接长连接的主要作是通过长时间保持双方连接,从而:提高通信速度;确保实时性;避免短时间内重复连接所造成的信道资源和网络资源的浪费。长连接与短连接的区别导致长连接断开的原因1. 长连接所在进程被杀死(这主要说的是移动端);2. NAT超时;3. 网络状态发生变化;4. 其他不可抗因素(网络状态差、DHCP的租期等等 )。下面,我将对每种原因进行分析。具体分析1)原因1:进程被杀死当进程被杀死后,长连接也会随之断开。进程被杀在Andriod端是最常见的问题,限于篇幅就不在此... Read More >
202201-08 长连接为什么需要心跳检测 背景首先,无论是自己设计的长连接还是websocket长连,都需要自己设计心跳机制来维持长连。从应用层协议来看,维持一个建立连接的必要条件似乎就是客户端和服务端均维持双方的连接信息,均用一个结构体来描述连接五元组(协议+源ip+源端口+目的ip+目的端口)。那么,是不是只要双方在应用层保证双方的连接信息不被清掉,就可以一直维护长连接呢。答案自然是否定的,长连接都是建立在TCP协议上的,所以我们先要了解操作系统是如何维护TCP协议连接状态的。TCP 连接状态所谓的TCP连接不是... Read More >
202201-07 开源OpenIM:高性能、可伸缩、易扩展的即时通讯架构 产品体验地址web端体验地址:http://121.37.25.71:23232/pc端下载: https://pan.baidu.com/s/16MW36rKVFtDCBewMOdD0pA 密码: jd15安卓下载:https://www.pgyer.com/OpenIM官方文档:https://doc.rentsoft.cn/github地址:https://github.com/OpenIMSDK/Open-IM-Server网上有很多关于IM的教程... Read More >
202201-06 关于股票除权复权,前复权、后复权、不复权 除权:简单讲就是 让市场上可以流通的股票变多了,每股的权益变少叫除权。假设某公司的总股本100股,每股10元,总权益就是1000元。当公司进行送股,每10股转送10股,总股本就变成了200股,而公司的总权益并没有变,于是每股价格就要变成1000/200=5元。这就是除权。复权:两股合成一股,叫复权,回复股票权利。当股价因送股、配股等原因而发生下跌时,原来10元/股的股票瞬间变成了5元/股,但该股票实际价值并没有发生变化,也就是说现在的5元实际上还是相当于10元。这就是复权。&... Read More >
202201-05 随机指标(KDJ)的计算方法和golang实现 KDJ指标的定义KDJ的另外一个名字叫随机指标,最早是以KD指标的形式出现,而KD指标是在威廉指标的基础上发展起来的,目前是金融市场上最常用的技术分析工具之一。KDJ 指标的原理利用当前股价(包括大盘指数,下同)在近期分布中的相对位置来预测可能发生的趋向拐点。它是利用市场价格真实的波动来反映价格走势的强弱以及超买超卖现象,从而在价格尚未出现明显的上升或下降之前提前发出交易信号,它是捕捉市场价格即将要发生拐点的一种技术工具。KDJ指标的计算方法KDJ指标是一种常用的价格走势判断... Read More >
202201-05 股票中MACD如何计算golang版本 概念 MACD称为指数平滑移动平均线,是从双指数移动平均线发展而来的,由快的指数移动平均线(EMA12)减去慢的指数移动平均线(EMA26)得到快线DIF,再用2×(快线DIF-DIF的9日加权移动均线DEA)得到MACD柱。MACD的意义和双移动平均线基本相同,即由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势,但阅读起来更方便。当MACD从负数转向正数,是买的信号。当MACD从正数转向负数,是卖的信号。当MA... Read More >
202201-04 go自定义包引入,报错包找不到的问题 背景从github下载了一个项目想运行下,发现找不到自己写的包,一直报错build command-line-arguments: cannot find module for path xxx目录结构stockIndicator indicator price.go &nb... Read More >
202201-03 livego介绍、安装、使用详解 前言写这篇文章主要是因为希望找到一个简单的方式实现直播功能,在度娘上找到livego(我平时写php和前端的,不懂golang),感觉安装部署都很方便,即使不懂golang的同学,只要有一定Linux和web后端开发知识都能搭建自己的直播服务。但是livego的文档的确比较少,然后对于我这个面向搜索引擎开发的菜鸟来说,连度娘也只找到为数不多的几篇相关博客文章,所以最后只能自己看GitHub的issue和反复测试趟坑,最后打算记录一下自己的趟坑过程也分享一下给各位小伙伴,希望对... Read More >
202201-02 什么是OBS(OBS直播推流操作步骤,看完就懂) 什么是 OBS? Open Broadcaster Software 是一款好用的互联网流媒体直播内容输入作软件。 OBS 使用是否收费? 不收费,这个程序和它的源代码都是免费的。 OBS 都支持哪些操作系统? 支持 OS X、Windows、Linux 操作系统。适用于多种直播场景。满足大部分直播行为的操作需求。 一、前期准备 直播间布置 参考:直播间布置手册:https://www.yuque.com/docs/share/555b3... Read More >