推 荐
推 荐
如何写出漂亮的代码-代码整洁之道 HOT 2020-12-07
2023
11-18
11-18
golang实时通信的服务器推送机制 EventSource(SSE) 简介 NEW

2023
11-17
11-17
golang中gin配合nginx写一个SSE服务程序 NEW

2023
11-09
11-09
Golang -- openwechat微信发送消息、自动回复 NEW
该 Demo 使用开源项目 openwechat ,实现获取好友列表、为好友发送消息、图片或文件,接收来自好友或群组的消息并设置自动回复等功能。项目入口代码很简单,就是调用一下微信的启动方法即可启动微信package main
import (
"fmt"
"github.com/eatmoreapple/...
Read More >
2023
11-08
11-08
微信网页版接口详解
本系列会讲述微信机器人技术的实现,第一讲主要了解微信网页版给我们提供的http接口,这一步是做一个基于微信网页版机器人的基础和难点。本讲将微信网页版的主要接口罗列出,并给出了入参和返回值的含义和用法,也欢迎大家与我交流。一、网页版微信提供的HTTP接口1、获取uuid 说明:用于获取显示二维码以及登录所需的uuid,标识获取二维码和扫码的为同一个用户 请求方式:GET &nb...
Read More >
2023
09-05
09-05
Go1.20 继续小修小补 errors 库
Go 的错误处理机制一直是无数人提了又争,被拒了又提的地方。最近 Go1.20 即将发布,针对 errors 标准库,有一个新的小修小补优化(wrapping multiple errors)。今天来学习这个三顾茅庐最终不怎么成功的阉割版提案。回顾 Go1.13 改进 errors在 Go1.13 中,errors 标准库引入了 Wrapping Error 的概念,并增加了 Is/As/Unwarp 三个方法,用于对所返回的错误进行二次处理和识别。简单来讲,Go 的 err...
Read More >
2023
08-09
08-09
go语言中常用的功能之七(二维数组按某列排序)
前言有时候我们需要根据切片中的某个字段进行切片排序,但sort包中只有默认基本类型 int 、 float64 和 string 的排序,所以我们可以手动实现sort包的 sort.Interface 接口,来完成自定义排序。这个接口有三个方法 Len() 、 Less(i,j) 和 Swap(i,j) 。1. 普通排序 a := []int{4,5,7,3,2}
sort.Ints(a)
fmt.Println(a)浮点和str...
Read More >
2023
03-09
03-09
grpc etcdv3兼容问题
undefined: grpc.SupportPackageIsVersion6 grpc.ClientConnInterface由于etcd版本管理的问题,导致etcd的代码和新版本的grpc冲突,会在编译时报错:undefined: resolver.BuildOption
undefined: resolver.ResolveNowOption
undefined: balancer.PickOptions
undefined:&nb...
Read More >
2023
03-08
03-08
运行proto文件踩坑历程
大家如果觉得安装问题很多,也可以直接参考这篇文章,使用一键安装和版本控制PowerProto: gRPC工具链(protoc, protoc-gen-go)的一键安装与版本控制 : https://phpmianshi.com/?id=4078一.安装protobufhttps://github.com/protocolbuffers/protobuf/releases在这里一定要确保你的protoc.exe是在你的gopath目录下,否则会报错protoc不是内部...
Read More >
PowerProto: gRPC工具链(protoc, protoc-gen-go)的一键安装与版本控制项目地址:github.com/storyicon/powerprotoPowerProto主要用于解决下面三个问题: 降低gRPC的使用门槛与使用成本。 解决protoc以及其相关插件(比如protoc-gen-go、protoc-gen-grpc-gateway)的版本控制问题...
Read More >
2023
03-06
03-06
etcd安装及go简单操作
ETCD 介绍 概念: 高可用的分布式key-value存储,实现配置共享和服务发现 类似项目: zookeeper和consul 开发语言: Go 接口: 提供restful的http接口,使用简单 实现算法: 基于raft算法的强一致性,高可用的...
Read More >
2023
03-05
03-05
go操作etcd实现服务注册和发现亲测版
服务发现etc/discovery/discovery.gopackage main
import (
"context"
"go.etcd.io/etcd/api/v3/mvccpb"
clientv3 "go.etcd.io/etcd/client/v3"
&nb...
Read More >
2023
03-05
03-05
Go操作etcd亲测版
2023
03-04
03-04
grpc与etcd实现服务注册和服务发现亲测版
一、前言grpc中没有像go-micro那样集成可插拔式的etcd库使用,如何使得grpc能够使用服务注册发现及命名解析的功能,因此本文基于etcd实现了Name Resolver。二、所需的grpc版本grpc相关库:google.golang.org/grpc v1.45.0
google.golang.org/grpc/resolveretcd相关库:go.etcd.io/etcd/client/v3 v3.5.7所需的protoc protoc-...
Read More >
2023
03-03
03-03
etcd clientv3 源码解读 - grpc负载均衡原理
1. 几个会反复出现的术语的理解resolver:解析器,可以粗暴理解为从一个字符串映射到一堆服务。比如经典的dns就是完成一个域名到一堆ip的映射解析,在etcd中,它自己定义了一个endpoint的解析器。有自己的格式,最终也是映射到服务地址。clientconns: 连接池。可以粗暴理解为这个池子缓存着与每个resolver解析后的地址的连接,数据哪里来呢? 原始数据会根据resolver解析完存进来,然后后面介绍的balancer会小心的维护这个池子。ba...
Read More >
2023
03-02
03-02
go语言中map拷贝 go map使用

2023
03-02
03-02
Go语言互斥锁(sync.Mutex)和读写互斥锁(sync.RWMutex)
Go语言包中的 sync 包提供了两种锁类型:sync.Mutex 和 sync.RWMutex。Mutex 是最简单的一种锁类型,同时也比较暴力,当一个 goroutine 获得了 Mutex 后,其他 goroutine 就只能乖乖等到这个 goroutine 释放该 Mutex。RWMutex 相对友好些,是经典的单写多读模型。在读锁占用的情况下,会阻止写,但不阻止读,也就是多个 goroutine 可同时获取读锁(调用 RLock() 方法;而写锁(调用 Lock()...
Read More >
2023
03-01
03-01
对已经关闭的 channel 进行读写关闭操作会发生什么
1、关闭已经关闭的 channel 会引发 panic,panic: close of closed channelch3 := make(chan int, 3)
wg.Add(1)
go func() {
for i := 1; i < 3; i++ {
ch3 <- i
}
cl...
Read More >
2023
03-01
03-01
优雅关闭channel
1 channel使用不当引发的问题示例1 重复关闭channelfunc main(){
ci:=make(chan int)
close(ci)
close(ci)}复制「编译不会提示错误,运行直接报错」panic: close of closed channel goroutine 1 [running]:示例2 向已关闭的channel中发送消息func main() {
&nbs...
Read More >
2023
01-01
01-01
gRPC简介和使用亲测版

2023
01-01
01-01
文心一言API接入指南
