
go
文章平均质量分 53
adream307
这个作者很懒,什么都没留下…
展开
-
etcd revision 测试
docker-compose启动 etcd 集群docker-compose -f etcd-only.yml up -detcd-only.yml,设置 snapshot 为100,即每 100 个修改,产生一次 snapshot,清除 WALversion: '3.5'services: machine-1: image: quay.io/coreos/etcd:v3.4.9 hostname: machine-1 container_原创 2021-03-16 16:32:59 · 1546 阅读 · 0 评论 -
go 的可执行程序生成 core dump 文件
Open a terminal in the directory with the file .Set the ulimit parameter to unlimited: ulimit -c unlimited.Build the program by running go build . in the terminal. The build command creates a binary file in the current project folder (for example, aweso.转载 2021-03-05 19:03:04 · 2025 阅读 · 0 评论 -
go 语言动态添加 select case
go 语言中传统的 select case 必须固定写死,即我们在编码阶段必须明确知道当前有几个 case,如下select{ case <- chan1: //todo case <- chan2: //todo case <- chan3: //todo case <- chan4: //todo}如果我在编码是不确定有几个 case,只在运行是才能知道,应该如何处理? 示例代原创 2020-11-30 13:40:52 · 1002 阅读 · 0 评论 -
int64的读写操作是否具有原子性质
在 x86-64 机器上,int64 的读写操作是否具有原子性?假设变量 val 是 int64, 现在有两个线程,线程 writer 只负责向 val 写入数据,线程 reader 只负从 val 读取数据假设 val 当前值为 0x0102030405060708writer 线程正在执行写操作,将数据 0x0000111100002222 写入 valreader 线程正在执行读操作,从 val 读取数据那么 reader 线程得到的 val 只能是 0x0102030405060708原创 2020-11-21 11:50:07 · 1192 阅读 · 0 评论 -
bash 脚本设置 GOPATH
go-path.sh#!/bin/bashif [ $# -ne 1 ];then echo "usage : go-path: <go-path>" exit 0fiif [ ! -z $GOPATH ];then echo "origin GOPATH = ${GOPATH}" echo "origin PATH = ${PATH}" go_bin_path=:${GOPATH}/bin原创 2020-11-03 19:39:57 · 501 阅读 · 0 评论 -
[pulsar] pulsar go sdk 测试
docker 启动 pulsardocker run --rm -p 6650:6650 -p 8080:8080 apachepulsar/pulsar:2.6.0 bin/pulsar standalonepulsar go sdkpackage mainimport ( "context" "encoding/binary" "github.com/apache/pulsar-client-go/pulsar" "log" "sync")func main() { cli原创 2020-11-03 14:59:10 · 537 阅读 · 0 评论 -
etcd 分布式锁实现原理
docker 启动 etcddocker run --rm -p 2379:2379 -p 2380:2380 --name etcd \quay.io/coreos/etcd:v3.4.9 etcd \--name node1 \--initial-advertise-peer-urls http://127.0.0.1:2380 \--listen-peer-urls http://0.0.0.0:2380 \--advertise-client-urls http://127.0.0.1:原创 2020-11-02 17:25:34 · 1058 阅读 · 0 评论 -
Mongodb go sdk 测试
启动 mongodbdocker run -it --rm -p 27017:27017 --name mongodb -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456 mongo:4.4mongo_exp1.gopackage mainimport ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mon原创 2020-10-21 13:31:45 · 298 阅读 · 0 评论 -
[go] 检查 channel 是否已经被关闭
val, ok := <-ch如果 channel 已经被关闭,上述调用立刻返回,并且 ok 为 false,完整测试代码如下package mainimport ( "log" "sync")func main() { ch := make(chan int) var wg sync.WaitGroup go func() { for i := 0; i <= 100; i++ { ch <- i } close(ch) }() wg.Ad原创 2020-09-11 11:55:54 · 606 阅读 · 0 评论 -
[go]zap配合logrotate实现日志滚动
zap是Uber 提供的GoLang高性能日志库,zap 本身并不提供日志滚动功能,官方 FAQ 提到,可以使用Linux系统自带的 logrotate 或lumberjack实现日志滚动功能lumberjack 只能向文件输出日志,如果我们希望同时向stderr 和文件输出日志,只能使用 logrotate 配合自定义 WriteSyncer 实现了Go代码package mainimport ( "bufio" "context" "fmt" "go.uber.org/zap" "g原创 2020-09-10 17:01:27 · 2206 阅读 · 1 评论 -
[go] 快速排序
实现go 的 sort.Interface接口,实现自定义数据类型的快速排序package mainimport ( "log" "sort")type myStructExp struct { id int}type myStructExps []*myStructExpfunc (s myStructExps) Len() int { return len(s)}func (s myStructExps) Less(i, j int) bool { return s[原创 2020-08-29 16:31:15 · 227 阅读 · 0 评论 -
[linux] page 写磁盘并不是原子性
以 page 为单位,向磁盘写数据,并不是原子性的,举例说明:写线程 writer 每次向磁盘输入一个 page 的数据量,w1 w2 w3 ...w1 w2 w3 ... 分别代表一个 page 的数据量读线程 reader 每次从磁盘读一个 page 的数据量操作系统并不保证 writer 写完整个 page 后,才让当前写入的数据整体对 reader 可见reader 读取一个 pape 的数据,可能部分来自 w1 部分来自 w2测试代码如下:package mainimport原创 2020-08-28 11:00:51 · 492 阅读 · 0 评论 -
[etcd] WithMaxCreateRev 和 WithRev 的区别
阅读 etcd 分布式锁 mutex 的源码时,遇到 waitDeletes 函数func waitDeletes(ctx context.Context, client *v3.Client, pfx string, maxCreateRev int64) (*pb.ResponseHeader, error) { getOpts := append(v3.WithLastCreate(), v3.WithMaxCreateRev(maxCreateRev)) for { resp, err :原创 2020-08-26 11:06:00 · 749 阅读 · 0 评论 -
[etcd] 使用 Txn 一次性插入多个语句
etcd 使用 Txn 提供简单的事务处理,使用这个特性,可以一次性插入多条语句,测试代码如下:package mainimport ( "context" "fmt" "go.etcd.io/etcd/clientv3" "log")func main() { endpoints := []string{"127.0.0.1:10001", "127.0.0.1:10002", "127.0.0.1:10003"} cli, err := clientv3.New(clientv3原创 2020-08-25 10:27:27 · 1985 阅读 · 0 评论 -
[etcd] 删除后重新插入,版本号重新计数
在 etcd 中,数据删除后重新插入,对应的版本号重新计算,测试代码如下:$ etcdctl --endpoints=http://127.0.0.1:10001 put k1 v1 -w json{"header":{"cluster_id":18293669711776909085,"member_id":8241799522139745222,"revision":2,"raft_term":2}}$ etcdctl --endpoints=http://127.0.0.1:10001 put原创 2020-08-24 14:30:30 · 410 阅读 · 0 评论 -
[go] go 面试题--变量作用域
以下程序,输出的 &i 是否相同package mainimport ( "fmt" "math/rand")func randInt() (int, int) { return rand.Int(), rand.Int()}func main() { p1, i := randInt() fmt.Printf("1: &i = %x, %d\n", &i, p1) p2, i := randInt() fmt.Printf("2: &i原创 2020-08-24 13:55:40 · 176 阅读 · 0 评论