go
W_GJ
进阶菜鸟
展开
-
gcc 查看支持的环境系统变量
gcc 查看支持的环境系统变量。原创 2023-02-01 14:15:56 · 211 阅读 · 0 评论 -
go 程序代码覆盖率采集
单元测试覆盖率原创 2023-01-05 17:46:48 · 621 阅读 · 0 评论 -
动态规划--图的最短路径问题(go实现)
【代码】动态规划--图的最短路径问题(go实现)原创 2022-12-23 16:05:05 · 155 阅读 · 0 评论 -
Tire 树, go极简实现
Tire原创 2022-12-19 16:29:12 · 56 阅读 · 0 评论 -
go 中快速查看 包/模块 依赖
要深刻理解 go 中,包和模块关系的不同模块是 module, 是工程包的综合,就是 go mod 文件中的第一句包是 一个module 下的一个一个目录。原创 2022-09-29 21:03:34 · 1907 阅读 · 0 评论 -
GPRC 接口统一返回值处理以及错误处理规范
****公共返回值规范:grpc接口 公共返回值:****原创 2022-07-07 23:39:05 · 1657 阅读 · 0 评论 -
Mac M1 上面虚拟机 搭建 k8s v 1.19.3 集群 命令参考
Mac M1 搭建k8s原创 2022-06-11 14:12:41 · 1360 阅读 · 6 评论 -
Golang-Map中value是不可寻址可使用指针类型代替
Golang Map元素取址:package mainimport "fmt"type UserInfo struct { Uid string `json:"uid"` UserName string `json:"user_name"` Sex int `json:"sex"`}func main() { var user = make(map[string]UserInfo) uid := "0001" user[u转载 2022-04-27 16:30:57 · 609 阅读 · 0 评论 -
go老鸟也会经常出现 并发channal问题引起的协程泄漏
go中经常用于并发channal问题引起的协程泄漏例子:package mainimport ( "log" "runtime" "time")func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) go func() { for { log.Printf("当前 goroutine 数量为:%d\n", runtime.NumGoroutine()) time.Sleep(1 * time.Second)原创 2022-04-24 16:51:03 · 516 阅读 · 0 评论 -
理解 go defer和panic 使用的小例子
一个挺有趣的小例子package mainimport "fmt"func a() { defer b() fmt.Println("a")}func b() { defer c() panic("b")}func c() { defer catchPanic("f") defer f() panic("c")}func f() { [panic("f")](https://mp.weixin.qq.com/s/pxWf762ODDkcYO-xCGMm2g)}原创 2022-04-23 23:17:41 · 287 阅读 · 0 评论 -
网格服务 grpc 客户端封装-利用接口指针反射设置grpc客户端
// authsvr_grpc.pd.gopackage authsvrtype AuthClient interface {}// package handlerfunc TestInitRpcClient(t *testing.T) { var authclent authsvr.AuthClient // grpc serve 端口, grpc 客户端new 函数, grpc 客户端接口指针 InitMicroRpcClient(":9001", authsvr.NewAuthCl原创 2022-04-18 16:41:28 · 508 阅读 · 0 评论 -
go中 反射获取结构体变量值,组装cmd命令的小例子
// GocFlag is flag of profile APItype GocFlag struct { RootGocCmd GocCmd Name string `form:"name" json:"name"` Center string `form:"center" json:"center"` Force bool `form:"force" json:"force"` Servi原创 2022-04-03 13:03:45 · 618 阅读 · 0 评论 -
go中 **byte 转为 []byte 切片示例
const PtrSize = 4 << (^uintptr(0) >> 63)func main() { a := [...]byte{'1', '2', '3'} b := [...]byte{'a', 'b', 'c'} c := [...]byte{'A', 'C', 'D'} aptr := (*byte)(unsafe.Pointer(&a)) bptr := (*byte)(unsafe.Pointer(&b)) cptr := (*by原创 2022-02-15 10:55:23 · 669 阅读 · 0 评论 -
对于新建文件,重命名文件,出来对数据的落盘,还得保证父目录的落盘
对于新建文件,重命名文件,出来对数据的落盘,还得保证父目录的落盘对目录落盘代码(系统:mac M1,语言:go)var path = "./test/"f,err := os.Open(path)err = Fsync(f)if err != nil { log.fatal(err.error())}func Fsync(f *os.File) error { _, err := unix.FcntlInt(f.Fd(), unix.F_FULLFSYNC, 0) return er原创 2021-03-16 15:05:34 · 91 阅读 · 0 评论 -
slice的几个灵活运用的例子
slice的几个灵活运用的例子slice 的 中间添加 某个值 numbers := []int{1} copy(numbers[1:],numbers[0:]) fmt.Println(numbers) var index = 1 numbers = []int{1,3,6} numbers = append(numbers,0) copy(numbers[index+1:],numbers[index:]) numbers[index]=2 fmt.Println(number原创 2021-03-05 18:50:41 · 140 阅读 · 0 评论 -
写时复制copyonwrite的demo,示例
阅读etcd源码时候,看到一个写时复制的实现,纪录一下package mainimport "fmt"type pgid uint64type txid uint64type meta struct { magic uint32 version uint32 pageSize uint32 flags uint32 freelist pgid pgid pgid txid txid checksum uint64}func main()原创 2021-03-03 15:30:47 · 174 阅读 · 1 评论 -
作为 int,以及int扩展类型的 潜在类型可以作为 数组的索引
作为 uint64 潜在类型可以作为 数组的索引(骚操作)type pgid uint64arr := []byte{1,2,3,4}fmt.Println(arr[pgid(2)])原创 2021-03-01 20:00:36 · 111 阅读 · 0 评论 -
go 中 unsafe 操作中 切片参数越界并不会报panic
go 中 unsafe 操作中 切片参数越界并不会报panicfunc main() { var ids []int // 这里报错,panic: runtime error: index out of range [0] with length 0 // fmt.Println(ids[0]) fmt.Println("size of unsafe.Sizeof(ids[0]):", unsafe.Sizeof(ids[0]))}输出 : size of unsafe.Sizeof(id原创 2021-02-26 19:16:54 · 369 阅读 · 0 评论 -
go 利用 cas 无锁化顺序输出 数字
go 利用 cas 无锁化顺序输出 数字package mainimport ( "fmt" "sync" "sync/atomic")var a int64func main() { ch := make(chan int64,100) wg := sync.WaitGroup{} wg.Add(1) go func() { wg1 := sync.WaitGroup{} defer wg.Done() defer close(ch) for i := 0; i原创 2020-12-25 11:18:46 · 140 阅读 · 0 评论 -
go mutex.go 中 lock unlock 源码解析
go mutex.go 中 lock unlock 源码解析mutex 主要是根据锁状态已经信号量来做锁的优化以及锁的升级// 加锁的逻辑type Mutex struct { state int32 sema uint32}const ( mutexLocked = 1 << iota // mutex is locked mutexWoken mutexStarving mutexWaiterShift = iota // 3)原创 2020-12-22 16:42:06 · 392 阅读 · 2 评论 -
go,java,c,c++ 当中分别对变量,指针和引用的使用
1、在Java 中 对象的使用2、在Go 中 结构体的使用3、在C 中 结构体的使用4、在C++ 中 结构体的使用1、在Java 中 对象的使用我们知道Java中只有引用,没有指针,Java new 一个对象 的内存空间是分配在堆上,有种说法是对象优先会分配在栈上面,基本类型肯定分配在栈上,而string类型的内存空间是分配在堆上,对string类型的+操作,只会生成新的string字符串。 由于java 对象中只有引用,所以当多个变量引用相同的对象是,可能会影响其他对象的值。原创 2020-12-17 11:22:33 · 199 阅读 · 0 评论 -
golang 源码中对 interface的灵活运用
interface的灵活运用工作期间阅读了一下 go 一个 mysql driver github.com/go-sql-driver/mysql@v1.5.0/errors.go:9 的 源代码,发现几个 interface 灵活应用的的小例子,特此记录一下1.struct TCPAddr 和 struct sockaddr 之间的灵活转换1. struct TCPAddr 和 struct sockaddr 之间的灵活转换我们先来看一下几个定义(都是定义在/usr/local/go/src/n原创 2020-12-16 13:58:26 · 200 阅读 · 1 评论