Go开发大全

其他

字节序及 Go encoding/binary 库

在网络协议层操作二进制数字时约定使用大端序,大端序是网络字节传输采用的方式。因为大端序最高有效字节排在首位(低地址端存放高位字节),能够按照字典排序,所以我们能够比较二进制编码后数字的每个字节。
2021年3月1日
其他

go-micro 动态加载插件源码分析

cmd.Run()}复制代码可以看出,主要就是更具传入的文件路径,创建目录,创建一个临时的go文件,然后调用
2021年2月26日
其他

使用多容器pod扩展k8s内应用

kubernetes也可以处理这种场景,不过可能会增加一些工作量。kubernetes提供的一个非常强大的功能来支持这种场景,就是多个容器pod,当然多个容器pod也可以以多种方式被云原生服务使用。
2021年2月25日
其他

go-clone:深拷贝 Go 数据结构

为了解决这个问题,应该使用经典的有向图检查环路的方法来实现,需要记下那些会产生循环的类型的访问记录,下次再访问到同样的数据时直接返回之前记录的结果即可打破循环。
2021年2月24日
其他

使用 kube-vip 管理K8S控制面高可用

kube-vip(https://kube-vip.io/)是一个开源项目,它提供了kubernetes集群内部和外部的高可用和负载均衡。本文中只介绍kubernetes集群内的控制面负载均衡。
2021年2月23日
其他

快速理解 k8s 命名空间

要让k8s用户看不到这些服务,也要能让管理员不对这些服务做误删改,为了达到这个效果,k8s就在创建集群的同时创建一个kube-system命名空间、在这个命名空间下创建控制面组件的服务。
2021年2月22日
其他

云原生微服务 gRPC 如何实现负载均衡

但是gRPC建立在HTTP/2之上,并且HTTP/2设计为具有单个长期TCP连接,所有请求都在该TCP连接上进行多路复用(多个请求可以在同一时间在同一连接上处于活动状态)。但是这也意味着
2021年2月19日
其他

Golang 内存管理与内存分配

https://medium.com/a-journey-with-go/go-memory-management-and-allocation-a7396d430f44
2021年2月18日
其他

Golang 1.16 新特性:embed使用教程

s)}网页文件这部分是//go:embed主要应用场景。有了embed就可以在一个可执行文件里包含所有静态文件和模板了。还可根据命令行参数让程序去读磁盘上的文件还是去读打包好的、嵌入的文件:
2021年2月17日
其他

对象池 sync.pool 源码解读

1.工作中遇到过很多池:连接池,线程池,协程池,内存池等,会发现这些所谓池,都是解决同一个类型的问题,创建连接、线程等比较消耗资源,所以用池化的思想来解决这些问题,直接复用已经创建好的。
2021年2月16日
其他

Golang 闭包到底包了什么?

【导读】放假充电!理解golang闭包的知识,在写代码和调试过程中非常必要,本文详细解读了闭包。
2021年2月15日
其他

Kubernetes组件介绍

所有集群数据的后台数据库。在二进制部署etcd集群的时候,必须要考虑到高可用方案,一般部署三个或者三个以上的奇数个节点,因为当master宕机时,是通过选举制度来选择master的。
2021年2月14日
其他

快速搭建高可用 ETCD 集群

${name}.etcd--snapshot-count:指定有多少事务(transaction)被提交时,触发截取快照保存到磁盘--heartbeat-interval:leader
2021年2月13日
自由知乎 自由微博
其他

Golang pkg/syscall详解

runtime·entersyscall和runtime·exitsyscall这两个函数也是与scheduler交互的地方,后面会对源码进行分析。
2021年2月12日
其他

Golang 汇编器快速上手指南

汇编器程序是一种解析半抽象指令集的描述并将其转换为输入给链接器指令的方法。如果想要看到给定体系的汇编指令(如:amd64),在标准库源码中有很多实例(比如
2021年2月11日
其他

Go 竞态检测器 race

的情况下执行测试,负载测试和集成测试是个不错的选择,它偏向于检测代码中可能存在的并发问题。另一种方式,可以利用生产环境的负载均衡,选择一台服务部署启动竞态检测的程序。
2021年2月10日
其他

Go 程序是如何编译成目标机器码的

字段指定的声明将包含参数列表和返回类型(如果我们指定了的话)。正文由一系列语句组成,里面包含了程序的所有行,在本例中只有一行fmt.Println("Hello,
2021年2月9日
其他

Kubernetes 滚动发布和回滚入门实战

80如果任何pod实例要失败或者更新(这两个都是变更的状态),k8s系统会针对变更之间的spec配置的diff做出更正操作,结果就是让deploymeng和最新的spec定义保持一致。
2021年2月8日
其他

GO 语言之反射 Reflect

第一个参数funcPtr以接口的形式传入函数指针,函数参数args以可变参数的形式传入,bridge函数中可以用反射来动态执行funcPtr函数2、对结构体序列化时,如果结构体有指定Tag,
2021年2月7日
其他

Go语言Interface源码级解读

f}}先从TypeOf说起。Go的函数都是值传递,参数传入TypeOf的之前,会先被转换为interface{}类型。若传入参数自身为interface类型,则会把自身的具体类型(concret
2021年2月5日
其他

Go pprof 性能分析

Profile(https://github.com/golang/go/blob/release-branch.go1.9/src/runtime/pprof/pprof.go#L135)
2021年2月4日
其他

如何使用 dlv 调试 Golang 程序?

【导读】golang调试工具dlv在开发工作中非常实用,怎么装、怎么用?本文带你快速上手dlv调试工具。
2021年2月3日
其他

Golang中的nil,没有人比我更懂nil!

名字都是nil,细想之下区别非常之大,golang围绕了nil制定了了很多固定的特殊用法。因此,在大部分情况下,nil的使用是非常自然的。这样的设计,究竟是好是坏呢?
2021年2月2日
其他

Prometheus k8s Operator监控系统

prometheus对应的nodeport端口为30200,访问http://192.168.92.56:30200通过访问http://192.168.92.56:30200/target
2021年2月1日
其他

Golang 日志框架 Zap 入坑指南

sugar"}{"level":"error","ts":1608365481.6156878,"caller":"zap3/main.go:15","msg":"i
2021年1月31日
其他

十分钟弄懂 k8s Operator 应用的制作流程

负责事件监听,并触发相应的动作来满足期望(Spec),这种方式也就是声明式,即用户只需要关心应用程序的最终状态。当我们在使用中发现现有的这些资源不能满足我们的需求的时候,Kubernetes
2021年1月30日
其他

Golang slice 使用技巧

https://blog.thinkeridea.com/201901/go/slice_de_yi_xie_shi_yong_ji_qiao.html
2021年1月29日
其他

理解 Golang Context 机制

Go的设计者在设计Goroutine时,已经考虑到“多个Goroutine共享数据,以及多Goroutine管理机制”。golang.org/x/net/context包就是这种机制的实现。
2021年1月28日
其他

细数k8s支持的4种类型的container

容器在Kubernetes中,init容器是在同一Pod中的其他容器之前开始并执行的容器。它旨在为Pod上托管的主应用程序执行初始化逻辑。例如,创建必要的用户帐户,执行数据库迁移,创建数据库结构等。
2021年1月27日
其他

详解 Golang 内存映射文件 mmap

这并不是计算机科学中的新问题,在上世纪60年代操作系统刚诞生之初就面临着一个类似的问题:我们如何才能运行磁盘中的比内存更大的程序?1961年,曼彻斯特的一个计算机小组在
2021年1月26日
其他

IO多路复用与Go网络库的实现

cache没得到充分利用,另外大量的线程会使得依赖thread-local加速的代码性能明显下降,如tcmalloc,一旦malloc变慢,程序整体性能往往也会随之下降。
2021年1月25日
其他

如何让go程序以后台进程或daemon方式运行

最终决定自己实现一个库解决我项目中的需求,同时也期望它是一个很通用的库,可以快速方便把go语言编写的服务程序转为后台运行,或者转为守护进程的模式运行。本文算是对这次探索的一次总结和梳理。
2021年1月24日
其他

IO多路复用与Go网络库的实现

cache没得到充分利用,另外大量的线程会使得依赖thread-local加速的代码性能明显下降,如tcmalloc,一旦malloc变慢,程序整体性能往往也会随之下降。
2021年1月23日
其他

Go语言错误处理的优雅实现

我们希望从实际的http.Handler调用中返回错误,具体的需求是在错误出现时能够向客户端返回处理后的错误信息,并且在返回客户端错误的同时能够记录下错误堆栈信息。代码实现如下。
2021年1月22日
其他

使用Go构建Kubernetes应用

RESTClient是一个基础包,它使用api-machinery库中的类型作为一组REST原语提供对API的访问。作为对RESTClient之上的抽象,_clientset_将是你创建k8s
2021年1月21日
其他

Go 命令行工具项目结构最佳实践

第一个最佳实践是,项目中任何可重用的代码都要做成一个package。如何设计package结构和有关package的最佳时间就需要单独写篇文章,我做过一次关于这个内容的分享,ppt连接在下面:
2021年1月20日
其他

Go channel死锁问题出坑记

channel读和写都是blocking的,也就是说读一个没人写的channel和写一个没人读的channel都会造成死锁。死锁状态下的goroutine会永远等待这个channel
2021年1月19日
其他

详解K8S List-Watch机制和Informer模块

API也能达到资源最终一致性的效果,但是周期性频繁的轮询大大的增大了开销,增加apiserver的压力。而watch作为异步消息通知机制,复用一条长链接,保证实时性的同时也保证了性能。
2021年1月18日
其他

我为什么放弃RESTful、拥抱GraphQL

有更加灵活的技术栈选择,能够实现在网络协议层面优化应用。举个经典的例子:前端向后端请求一个book对象的数据及其作者信息。我用动图来分别演示下REST和GraphQL是怎么样的一个过程。先看REST
2021年1月17日
其他

Go泛型真的要来了!最早在Go 1.17版本支持

https://tonybai.com/2020/06/18/the-go-generics-is-coming-and-supported-in-go-1-17-at-the-earliest/
2021年1月16日
其他

使用Golang实现Spark UDF

spark_jars/spark-core_$(VERSION).jar:eventdecoder.jar:spark_jars/spark-sql_$(VERSION).jar
2021年1月15日
其他

Etcd 源码分析:Raft 实现

r}我们发现,NewTicker入参是r.heartbeat,而且只有一个定时器。那么它是怎么做到的呢?用一个定时器管理两个业务逻辑?首先看一下,处理流程:
2021年1月14日
其他

Golang 新手可能会踩的 50 个坑

中,数组(名)是指针。将数组作为参数传进函数时,相当于传递了数组内存地址的引用,在函数内部会改变该数组的值。
2021年1月13日
其他

在生产环境用了一年 k8s 的经验教训

我认为,容器是未来的部署格式。使用容器,非常方便用服务所需的基础层进行打包。Docker这类工具虽然提供了容器,我们也需要管理副本和做故障转移的工具和API,有了这些才能自动化部署多台机器。
2021年1月12日
其他

走进 Golang 垃圾回收

https://github.com/golang/go/commit/d6625caf5397a52edc38e19d523a597b531a5f12systemstack(func()
2021年1月10日
其他

亲测好用的 K8s & DevOps 工具

Helm帮助用户管理他们的Kubernetes应用程序,通过Helm图表让你可以共享你的应用程序。这让用户能够创建可共享可复制的构建,但它不推荐用于更高级、更频繁的部署。
2021年1月9日
其他

使用人工智能优化 Golang 编译器

为了验证我们的疑问,我们改了一版生成代码,改为了和原先生成的一样使用临时变量,发现确实去掉了这条语句后,性能没有任何变化。也就是说,性能的问题并不是这个间接寻址导致的。
2021年1月8日
其他

K8S 集群内 Debug 微服务的最佳实践

既然是要做demo,我就用minikube了。如果你已经有一个运行中的非生产环境集群,那么你就用你的集群。注意不要在生产环境做测试。
2021年1月7日
其他

Golang 在 runtime 中的一些骚东西

的使用非常谨慎,并且尽可能避免不需要的原子操作。如果对于一个变量的访问已经被另一种同步机制所保护,那么这个已经被保护的访问一般就不需要是原子的。这么做主要有以下原因:
2021年1月6日
其他

Golang 临界资源安全与互斥锁

而在结尾时,竟然出现了余票为负数的情况,其产生的原因在于,票数快要卖完时,当售票口1余票1,并且售完这一张票后,在这个时间段内,售票口2已经进入了if
2021年1月4日