随笔分类 - go
golang
摘要:raft 中文翻译 选举过程 跟随者一个心跳周期没有收到心跳,触发选举,但是为了选举安全性,和领导者失联的时间必须超过一个心跳周期开始 状态变化 跟随者 > 候选者 > 领导者 处理交互请求,例如 追加日志,选举投票等 // processRPC is called to handle an inc
阅读全文
摘要:go-kit/kit 基本功能 auth -- 校验 circuitbreaker -- 熔断 endpoint -- 服务 log -- 日志 metrics -- 监控 ratelimit -- 限流 sd -- 服务发现 tracing -- 跟踪 transport -- 请求 auth /
阅读全文
摘要:fx fx 为 uber 提供的一个 控制反转和自动化装配的golang语言的解决方案 demo 示例 示例: package main import ( "context" "log" "net/http" "os" "time" "go.uber.org/fx" ) // NewLogger c
阅读全文
摘要:zap zap 是 uber 提供的 一个高性能的组件库 结构 一条结构化的日志大致包含5个过程: 分配日志 Entry: 创建整个结构体,此时虽然没有传参(fields)进来,但是 fields 参数其实创建了 检查级别,添加core: 如果 logger 同时配置了 hook,则 hook 会在
阅读全文
摘要:websocket 协议了解 https://www.cnblogs.com/chyingp/p/websocket-deep-in.html 源代码 var addr = flag.String("addr", "localhost:8080", "http service address") v
阅读全文
摘要:oxy 作用 限流 负载 代理 Oxy is a Go library with HTTP handlers that enhance HTTP standard library: Buffer retries and buffers requests and responses Stream pa
阅读全文
摘要:leveldb 使用 // The returned DB instance is safe for concurrent use. Which mean that all // DB's methods may be called concurrently from multiple gorout
阅读全文
摘要:logrus 实现多个实例 func New() *Logger { return &Logger{ Out: os.Stderr, Formatter: new(TextFormatter), Hooks: make(LevelHooks), Level: InfoLevel, ExitFunc:
阅读全文
摘要:viper Functional options 在 c# 等语言中,一般多个参数这么实现 funcion add(){ } funcion add(int a){ } funcion add(int a,int b){ } 在 golang 中,由于没有重载,在实现多个参数是会比较麻烦,可能的实现
阅读全文
摘要:redigo 接口 Conn type Conn interface { // Close closes the connection. Close() error // Err returns a non-nil value when the connection is not usable. E
阅读全文
摘要:gin http.handler 接口定义 package http type Handler interface { ServeHTTP(w ResponseWriter, r *Request) } func ListenAndServe(address string, h Handler) e
阅读全文
摘要:gRPC gRPC-入门 grpc 介绍 gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python,
阅读全文
摘要:并发 goroutine goroutine是Go并行设计的核心。goroutine说到底其实就是协程,但是它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然
阅读全文
摘要:反射(Reflection) 反射是利用reflect包实现的 反射可大大提高程序的灵活性,使得interface{}有更大的发挥余地 反射使用TypeOf和ValueOf函数从接口中获取目标对象信息 反射会将匿名字段作为独立字段(匿名字段本质) 想要利用反射修改对象状态,前提是interface.
阅读全文
摘要:错误处理 通过内置的错误接口提供了非常简单的错误处理机制。 error类型是一个接口类型 可以在编码中通过实现 error 接口类型来生成错误信息。 函数通常在最后的返回值中返回错误信息。使用errors.New 可返回一个错误信息 func testErr(num int) (int, error
阅读全文
摘要:程序测试 测试是一个可重复的过程,它验证某个东西是否按预期工作。一般通过 go test 进行测试,步骤如下 首先,是我们的文件名。Go 要求所有的测试都在以 _test.go 结尾的文件中。这使得我们在检查另一个 package 包的源代码时,确定哪些文件是测试和哪些文件实现功能非常容易。 在看了
阅读全文
摘要:类型转换(Type Conversion) 类型转换用于将一种数据类型的变量转换为另外一种类型的变,基本格式 示例
阅读全文
摘要:语言指针 定义及使用 变量是一种使用方便的占位符,用于引用计算机内存地址。取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。 一个指针变量指向了一个值的内存地址。类似于变量和常量,在使用指针前你需要声明指针。 var type 为指针类型,var_name 为指针变量名, 号用于指定变量
阅读全文
摘要:包处理 package是go管理代码的重要工具,用于组织 Go 源代码,提供了更好的可重用性与可读性。 可见性 变量或函数名的首字母大写时,其就是可导出的,小写时则是不可导出的。 函数和变量的可访问性是以包做隔离的。 main 函数和 main 包 可执行的程序都必须包含一个 main 函数。这个函
阅读全文