随笔分类 - Go
摘要:1.引入 现在我们有一个结构体student,当我们以不同的顺序排列结构体中的字段时会出现占用字节大小不相同的情况,如下: type student struct { id int16 name string boy bool } fmt.Println(unsafe.Sizeof(student{
阅读全文
摘要:1.for select时,如果通道已经关闭会怎么样?如果只有一个case呢? select用于监听channel,在通道关闭时,channel会返回类型的空值,直接用`<-`取值时无论通道是否关闭都会有值返回.所以当使用select监听通道时,如果某个channel已经关闭,则每次都会执行这个ca
阅读全文
摘要:etcd是一种高度一致的分布式键值存储, 它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据. 它在网络分区期间优雅地处理领导者选举,并且可以容忍机器故障,即使在领导者节点中也是如此.今天我们简单了解下etcd集群的搭建. etcd安装: https://www.cnblogs.com
阅读全文
摘要:一.etcd简介 etcd 是一个分布式键值对存储系统,由coreos 开发,内部采用 raft 协议作为一致性算法,用于可靠、快速地保存关键数据,并提供访问。通过分布式锁、leader选举和写屏障(write barriers),来实现可靠的分布式协作。etcd集群是为高可用、持久化数据存储和检索
阅读全文
摘要:一.引入 在编写代码时,当我们通过一个结果体构造一个新的对象时,往往会像下边这样,但如果结构体中有很多的字段,而且在构造新对象时只需要修改很少的字段,其它字段都使用默认值,用下边这种方式就会显得很笨重,这里我们就可以引入函数式选项模式的概念. type student struct { name s
阅读全文
摘要:一.反射的概念 Go语言提供了一种机制在运行时更新和检查变量的值,调用变量的方法和变量支持的内在操作,但是在编译时并不知道这些变量的具体类型, 这种机制被称为反射.Go语言中的反射是由 reflect 包提供支持的,它定义了两个重要的类型 Type 和 Value 任意接口值在反射中都可以理解为由
阅读全文
摘要:一.服务发现简介 在微服务开发和部署过程中,每个服务都运行在一个独立的进程中,服务于服务之间通过轻量级的通信机制进行沟通(如RESTful API),那么怎样管理这些服务呢,当用户发送一个请求,应该去请求哪个服务来满足用户的请求呢?这时候就用到了服务发现功能.服务发现相当于一个注册中心,它记录了分布
阅读全文
摘要:一. protobuf环境配置 1.下载protobuf编译器protoc, 下载地址: https://github.com/protocolbuffers/protobuf/releases 注意根据电脑的版本下载,这里使用的是 protoc-3.19.4-win64.zip,下载完成后解压,进
阅读全文
摘要:github.com/spf13/viper 配置解决方案,支持 JSON/TOML/YAML/HCL/envfile/Java properties 等多种格式的配置文件 func main() { var config = "config.yaml" // 文件名及路径 v := viper.N
阅读全文
摘要:使用socket实现类似微信单聊自由发送或接收消息的功能. server端: func main() { listener, err := net.Listen("tcp", ":8080") if err != nil { panic(err) } log.Println("Listening..
阅读全文
摘要:加密: func MyEncrypt(data, key []byte, iv []byte) ([]byte, error) { /* key必须是8位,否则报错: if len(key) != 8 { return nil, KeySizeError(len(key)) } */ block,
阅读全文
摘要:第三方包准备: go get -u github.com/xuri/excelize/v2 案例: 读取excel,去除空行,筛选第二列不为空的行并将最终结果存入新的excel中. 思路: 读取excel,使用GetRows()方法读取指定sheet中所有数据,如果excel数据量庞大,可以指定一个
阅读全文
摘要:// 记录一下学习指针时遇到的问题,如表述或理解有误,欢迎指正. 1.指针变量是用来存放内存地址的变量,它的值是一个内存地址,而它本身也保存在一个内存地址中. 2.当初始化一个指针变量时,cpu会开辟一块内存给这个指针变量;当给这个指针变量赋值后,这个指针会指向一个地址,其值为申明变量时指定类型的零
阅读全文
摘要:1.字符串比较 常用方法: strings.Compare(),strings.EqualFold() func main() { a := "Hello" b := "hello" // 用于比较两个字符串的大小,如果两个字符串相等,返回为 0。如果 a 小于 b ,返回 -1 ,反之返回 1 f
阅读全文
摘要:方法一: Go版本为1.13及以上版本: go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.io,direct 方法二: linux或macos系统: # 启用 Go Modules 功能 export GO111MODULE=on
阅读全文