go
文章平均质量分 88
CoreDump丶
一枚学生党
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
mangokit:golang web项目管理工具,使用proto定义http路由和错误
mangokit是一个web项目的管理工具,它的功能如下:1. 根据预设的项目结构创建出一个web项目,使用已有的代码框架,减少工作量2. 使用proto来定义http路由以及错误码,使用相关工具生成代码,完成自动结构体反序列化以及返回值响应3. 使用wire来管理依赖注入,减少依赖管理的烦恼原创 2023-12-20 18:58:45 · 2289 阅读 · 0 评论 -
Golang中gRPC使用及原理探究
gRPC是一种进程间通信技术,在微服务和云原生领域都有着广泛的应用。在使用之前需要使用proto文件来定义出message类型和service接口,比如下面的greeter";syntax表示proto语法版本,在此使用proto3版本第3行用于声明生成的go代码的package第9行和第13行定义了两个消息,都包含一个data的字段,类型为string第5行定义了一个名为Greeter的service,该service包含一个rpc方法为SayHello为请求类型,HelloReply。原创 2023-10-14 23:26:33 · 3094 阅读 · 0 评论 -
go字符串拼接方式及性能比拼
在golang中字符串的拼接方式有多种,本文将会介绍比较常用的几种方式,并且对各种方式进行压测,以此来得到在不同场景下更适合使用的方案。原创 2023-09-25 17:40:21 · 3020 阅读 · 0 评论 -
Golang源码探究——从Go程序的入口到GMP模型
在大多数的编程语言中,main函数都是用户程序的入口函数,go中也是如此。那么main.main是整个程序的入口吗, 肯定不是,因为go程序依赖于runtime,在程序的初始阶段需要初始化运行时,之后才会运行到用户的main函数,那么main.main是在哪里被调用的呢?接下来就从go程序的入口,再到go的GMP模型进行一个探究。原创 2023-06-29 13:13:43 · 1380 阅读 · 2 评论 -
k8s编程operator实战之云编码平台——⑤项目完成、部署
截至目前,云编码平台的基本功能已经实现了。使用该平台,我们可以根据空间模板来创建出一个云开发环境。对于每个用户来说,允许存在的工作空间最大数量为20个,允许同时启动的工作空间数量为1个。用户的代码数据以及安装的插件都是可以保存下来的。原创 2023-03-03 15:42:07 · 3286 阅读 · 4 评论 -
k8s编程operator——(4) kubebuilder & controller-runtime源码分析
在本章中将会介绍k8s operator开发的脚手架kubebuilder和其生成的代码依赖的controller-runtime原创 2022-12-12 14:57:50 · 2116 阅读 · 0 评论 -
k8s编程operator实战之云编码平台——④web后端实现
在前两章中分别实现了k8s controller和后端pod的访问。通过controller可以实现code-server容器的创建、删除以及状态维护等,通过openresty可以实现后端pod的动态反向代理。接下来将会实现web后端,使用的`web框架为Gin`;`mysql驱动为sqlx`;`redis驱动为go-redis`;`以及grpc`。原创 2022-12-15 21:09:45 · 1901 阅读 · 0 评论 -
k8s编程operator实战之云编码平台——②controller初步实现
在上一章中介绍了整个云编码平台的架构设计,本章中将实现架构中的controller。需要使用的技术:k8s二次开发kubebuilder、grpc原创 2022-12-12 19:27:10 · 2700 阅读 · 0 评论 -
k8s编程operator实战之云编码平台——①架构设计
之前偶然接触到了腾讯的Cloud Studio平台,使用这个平台我们可以创建一个云上的IDE,我们在本地使用浏览器即可打开vscode来写代码。之后我就一直在想,这样一个平台是怎么样实现的?原创 2022-12-12 19:19:30 · 2244 阅读 · 3 评论 -
k8s编程operator——(3) 自定义资源CRD.md
在K8S系统扩展中,开发者可以通过CRD(CustomResourceDefinition)来扩展K8S API,其功能主要由APIExtensionServer负责。使用CRD扩展资源分为三步:注册自定义资源、 使用自定义资源、删除自定义资源原创 2022-11-26 20:38:07 · 3307 阅读 · 0 评论 -
k8s编程operator——(2) client-go中的informer
使用client-set可以很容易地对ApiServer中的数据进行增删改查。但是,如果每次都从ApiServer获取数据,特别是执行List操作时,ApiServer会查询并传输大量的数据,将会对其产生很大的压力。如果能将数据缓存到本地,并在数据变化时进行更新,获取数据时从本地获取,那么将会大大减轻ApiServer的压力。因此,本章将会对client-go中的informer进行一个探究,通过Infomer,我们可以实现将数据缓存到本地,并且当资源对象发生变化时,我们能获取到相应的变化,并进行处理。原创 2022-11-23 16:45:41 · 3140 阅读 · 3 评论 -
Golang标准库限流器rate使用
限流就是限制系统的输入和输出流量来达到保护系统的目的,限流在实际场景中应用十分广泛,尤其在高并发场景下,为了保证系统的可以用性,我们需要采取一些限流措施降级,一旦达到限制的阈值,就需要限制流量并采取一些措施来完成限制流量的目的(比如:延迟处理、拒绝处理等),以防止过多的请求而导致系统崩溃。在golang的标准库golang.org/x/time/rate有一个限流器的实现,这个限流器的实现方案是令牌桶。原创 2022-11-21 12:48:30 · 2611 阅读 · 0 评论 -
k8s权限控制RBAC
kubernetes集群所有的交互都是通过apiServer来进行的,因此k8s对权限的控制就尤其重要。从1.6版本起,kubernetes默认启用RBAC访问控制策略。RBAC(Role-Based Access Control):基于角色的访问控制RBAC中4种顶级资源:Role、ClusterRole、RoleBinding、ClusterRoleBinding角色,包含一组权限的规则。没有拒绝规则,只是附加运行。Namespace隔离,只作用于命名空间。原创 2022-11-14 12:07:42 · 1579 阅读 · 0 评论 -
k8s编程operator——(1) client-go基础部分
client-go是一个golang的client,我们可以通过client-go与K8S apiServer进行交互,对k8s集群中资源对象,包括内置资源(例如:Pod、Deployment、Service等)和CRD进行增删改查等操作。client-go地址目录结构:该包包含了可以访问kubernetes集群的api,通过这些API可以与apiServer进行通信,对集群的资源对象进行增删改查。原创 2022-11-11 22:15:49 · 5717 阅读 · 1 评论 -
Golang源码探究 —— chan
在Golang中,chan是我们常用的数据结构,chan是并发安全的,在使用它的时候我们无需考虑锁的问题。而且chan使用非常方便,chan与goroutine配合,很容易就可以实现一个生产者/消费者模型。了解chan的源码可以让我们了解更多关于chan的实现以及更好的使用。原创 2022-09-08 14:32:41 · 3104 阅读 · 0 评论 -
Golang骚操作——使用runtime私有函数
在Golang中,变量、函数、结构体等访问权限是由标识符的首字母大小写决定的,首字母小写的变量等在其它包中是不可见的,那么我们如何才能使用它们呢?这就需要使用一些骚操作了。说起Golang的入口函数,我们都会认为是main.main,但是在Golang程序启动前,需要先执行runtime.main来初始化调度器、垃圾回收器等。这个main_main函数没有函数体,在链接的时候,编译器会将其链接到我们自己的main函数,然后由runtime.main来调用。原创 2022-08-23 14:39:21 · 865 阅读 · 0 评论 -
Golang源码探究 —— sync.Map
Golang内置的map是不支持并发读写的,它在内部有检测机制,一旦发现并发读写,就会panic。如果需要并发读写map,有三种方案。 。前两者的效率在大部分情况下都不如官方提供的sync.Map。接下来来分析一下sync.Map是如何实现并发读写的。 sync.Map的结构用图表示如下:源码如下: sync.Map结构体中包含了四个字段,其中包含了两个map[interface{}]*entry ,entry中包含了一个unsafe的Pointer,这个指针指向了真正的value值。原创 2022-06-28 17:04:12 · 1426 阅读 · 0 评论 -
Golang源码探究 —— map
哈希表的实现方式有多种,比如哈希表、红黑树等。Golang的map底层是用哈希表实现的,在介绍Golang map的实现之前首先介绍一下哈希表的两种实现方式: 开放寻址法,底层是一个数组,每个数组都存放一个键值对,空闲的地方就是没有放键值对的地方。首先看如何插入:key-val首先经过一个哈希函数将key值进行哈希得到一个大的数字,然后将其对数组的长度取模,这样它就落在了数组中的一个位置。如果得到的位置没有被占用,那么就直接存放在对应位置。如果已经被占用了,那么就向后寻找一个槽,直到找到空闲的原创 2022-06-25 14:10:03 · 3338 阅读 · 7 评论 -
使用适配器简化golang gin框架开发
我们在使用Gin框架时,可能在handler中有很多分支判断语句,就要写很多的ctx.Json来返回数据,这样用起来很麻烦,看起来也不美观。本文将使用一个装饰器来简化Gin的数据响应。比如,我们在使用Gin框架时,往往会这么写,在创建用户的handler中反复使用ctx.Json来返回数据,handler多了也会显得很烦。因此能不能实现一个handle,直接返回值就可以达到写出数据的目的呢。这时就可以使用装饰器模式来进行优化一下了。type User struct { Username string原创 2022-04-29 09:40:20 · 495 阅读 · 0 评论 -
Golang函数选项模式
由于Golang不支持函数重载,因此无法像C++或Java那样可以定义多个同名不同参的构造函数,因此如果要定义多个构造函数就需要使用不同的名称。但是如果后续要给结构体增加新的字段,那么可能就需要修改很多的构造函数,函数选项模式就可以完美解决这个问题。1、正常的构造函数拿下面的代码举个例子:type User struct { username string password string nickname string age uint8 gender bool原创 2022-04-21 13:06:34 · 469 阅读 · 0 评论
分享