golang从入门到入门
文章平均质量分 66
怪我冷i
这个作者很懒,什么都没留下…
展开
-
Raft算法——Leader Completeness Property(领导者完整性属性)
Leader Completeness Property指的是,在Raft算法中,如果一个日志条目在某个任期内被提交,那么这个条目一定会出现在所有任期号更大的领导者中。简而言之,新的领导者必须包含所有已提交的日志条目。这一属性确保了系统的状态在不同领导者之间能够保持一致,从而避免了数据不一致和混乱的情况。原创 2024-08-24 15:00:00 · 312 阅读 · 0 评论 -
golang每日一库——casbin开源的访问控制框架
部分用于request的定义,它明确了函数中参数的含义。表示经典三元组: 访问实体 (Subject),访问资源 (Object) 和访问方法 (Action)。但是, 你可以自定义你自己的请求表单, 如果不需要指定特定资源,则可以这样定义sub、act,或者如果有两个访问实体, 则为。这些是我们对policy规则的具体描述policy部分的每一行称之为一个策略规则, 每条策略规则通常以形如pp2的开头。如果存在多个policy定义,那么我们会根据前文提到的与具体的某条定义匹配。TIP。原创 2024-08-23 13:00:00 · 967 阅读 · 0 评论 -
golang学习笔记——grom连接mysql
Golang的ORM库旨在对开发人员友好。原创 2024-08-25 00:30:00 · 736 阅读 · 0 评论 -
k8s笔记——资源对象
以下列举的内容都是 Kubernetes 中的对象(Object),这些对象都可以在 YAML 文件中作为一种 API 类型来配置。原创 2024-08-20 10:28:14 · 1043 阅读 · 0 评论 -
Protobuf语法
文件以做为文件后缀,除结构定义外的语句以分号结尾结构定义可以包含:message、service、enumrpc方法定义结尾的分号可有可无Message命名采用驼峰命名方式,字段命名采用小写字母加下划线分隔方式Enums类型名采用驼峰命名方式,字段命名采用大写字母加下划线分隔方式Service与rpc方法名统一采用驼峰式命名字段名称字段名称的命名与C、C++、Java等语言的变量命名方式几乎是相同的protobuf建议字段的命名采用以下划线分割的驼峰式。例如 first_name 而不原创 2024-08-23 01:00:00 · 1439 阅读 · 0 评论 -
golang学习笔记——三色标记法、强三色不变式、弱三色不变式、插入屏障、删除屏障、混合写屏障
Golang的三色标记法是一种高效、并发且适应性强的垃圾回收算法,它通过将对象分为白色、灰色和黑色三种颜色,并追踪对象的引用关系来确定哪些对象是可达的,哪些是不可达的,从而进行垃圾回收。这种算法为Golang提供了方便且高效的内存管理机制,使得程序员可以更加专注于程序的逻辑实现而无需担心内存管理的问题。Golang中的插入屏障、删除屏障和混合写屏障是GC机制中用于保证标记准确性的重要技术。它们各自具有不同的优缺点,但共同的目标是提高GC的效率和准确性。原创 2024-07-25 00:30:00 · 830 阅读 · 0 评论 -
golang学习笔记——三色标记混合写屏障GC模式全分析
以上便是 Golang 的 GC 全部的标记 - 清除逻辑及场景演示全过程。GoV1.3- 普通标记清除法,整体过程需要启动 STW,效率极低。GoV1.5- 三色标记法, 堆空间启动写屏障,栈空间不启动,全部扫描之后,需要重新扫描一次栈 (需要 STW),效率普通GoV1.8 - 三色标记法,混合写屏障机制, 栈空间不启动,堆空间启动。整个过程几乎不需要 STW,效率较高。转载 2024-07-24 10:48:56 · 98 阅读 · 0 评论 -
k8s笔记——Prometheus 中的Histogram指标
定义:Histogram是一种度量类型,用于表示数据的分布情况。它通过一系列预设的桶(buckets)来收集观察值,并计算每个桶中的观察值数量。目的:主要用于分析和监控数据的分布情况,如响应时间、请求大小等。Prometheus中的Histogram是一种强大的度量类型,用于表示数据的分布情况。通过预设的桶来收集观察值,并计算每个桶中的数量,同时提供总和和总数的附加信息。虽然百分位数的估算可能存在一定误差,但Histogram仍然是分析和监控数据分布的重要工具。原创 2024-07-02 16:00:00 · 459 阅读 · 0 评论 -
k8s笔记——helm chat与k8s Operator区别
Kubernetes 中的自定义资源是对 Kubernetes API 的扩展,它使向 Kubernetes 集群添加默认情况下不可用的功能成为可能。您可以通过创建自定义资源定义(CRD)来实现这一点。如果要使用 Kubernetes Operator 来安装或管理应用程序,您可以创建实现该应用程序所需功能的 CRD。如果您随后将 CRD 与 Operator 的控制器组合,Kubernetes 控制器例程将检测并部署它。有时,使用 Operator 而不是 Helm 并没有明确的优势,反之亦然。原创 2024-06-30 20:30:00 · 1212 阅读 · 0 评论 -
golang学习笔记——类型断言
interface{} 好比 java 中的 Object,java 中的所有类都实现了Object。从测试代码中可以看出,结构体可以断言原本的类型,也可以断言是否继承,实际上这两个分支都是可以进去的。,程序会终止,显然并不能满足一些业务的需求,比如记录错误日志,或走其他分支等等,所以。的参数,就代表了它可以传递任何类型的变量。,再加上**switch **判断类型 不可以使用。多说一句,出于代码可读性角度来讲,编码时可以使用。直接断言使用,返回对应类型的值。,所以如果切换顺序,会匹配到。原创 2024-06-23 01:00:00 · 855 阅读 · 1 评论 -
golang学习笔记——接口经典面试题 value receivers与pointer receiver
func (s *MyStruct) pointerMethod() { } // 指针方法func (s MyStruct) valueMethod() { } // 值方法对于不熟悉指针的程序员,很难理解这两个例子的区别,实际上这很简单。为类型定义方法时,接收者(上面例子中的 s)实际扮演的是方法的一个参数。判断使用值还是指针定义方法与判断使用值还是指针作为函数参数是相同的问题。有以下几点考虑。首先,最重要的是,这个方法是否需要改变接收者?如果是,接收者必须是指针。原创 2024-06-26 01:00:00 · 1545 阅读 · 0 评论 -
golang学习笔记——结构体嵌套接口
在Go语言中,结构体嵌入接口(embedding an interface in a struct)是一种将接口作为结构体字段的方式。但是,这里的“嵌入”与传统的字段嵌入稍有不同,因为接口本身不包含任何数据,只包含一组方法的签名。当你在结构体中嵌入一个接口时,你实际上是在声明该结构体必须实现该接口的所有方法。这并不是说接口被“嵌入”到结构体中,而是说结构体承诺它将满足该接口的方法集。原创 2024-06-17 00:00:00 · 411 阅读 · 0 评论 -
k8s笔记——kubernetes中的三种IP
集群控制节点,每个集群需要至少一个master节点负责集群的管控:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等:pod对外服务的统一入口,下面可以维护者同一类的多个pod:标签,用于对pod进行分类,同一类pod会拥有相同的标签。原创 2024-05-31 01:00:00 · 799 阅读 · 0 评论 -
k8s笔记——GVK是什么
在 Kubernetes 中,所有的资源对象都必须要有一个 GVK,以便于 Kubernetes 控制器进行操作和管理。对于一个特定的资源对象,可以通过。在 Kubernetes 中,GVK 是指 Group、Version 和 Kind 三个字段,用于唯一标识 Kubernetes 资源对象。,其中 core 是资源组,v1 是 API 版本,Pod 是资源对象类型。命令来查看它的 GVK 信息。例如,Pod 资源对象的 GVK 是。原创 2024-05-29 12:30:15 · 579 阅读 · 0 评论 -
k8s笔记——kubectl apply run create区别
用于通过文件或标准输入来应用配置,支持更新已存在的资源。:用于快速启动容器化的应用程序,特别适合快速测试或临时部署。:用于从文件、目录或标准输入中创建资源,但不会更新已存在的资源。原创 2024-05-31 00:30:00 · 893 阅读 · 0 评论 -
k8s笔记——Client-go 4种客户端与Kubernetes API Server 交互
Client-Go 共提供了 4 种与 Kubernetes APIServer 交互的客户端。分别是 RESTClient、DiscoveryClient、ClientSet、DynamicClient。原创 2024-05-29 03:00:00 · 516 阅读 · 0 评论 -
minikube start 可选项(中文版)
minikube start 可选项原创 2024-05-26 00:00:00 · 511 阅读 · 0 评论 -
debian安装protoc
有多种安装方法。原创 2024-05-28 00:45:00 · 274 阅读 · 0 评论 -
轻量级 K8S 环境 安装minikube
将用户添加到 Docker 组: 若要允许用户在不使用 sudo 的情况下运行 Docker 命令,可以将用户添加到 docker 组。尝试上述步骤后,你应该能够在不遇到 “permission denied” 错误的情况下运行 Docker 命令。请记住,如果将用户添加到 docker 组,可能需要注销并重新登录以使组更改生效。添加用户到 docker 组后,可能需要注销并重新登录以使更改生效。路径为,云服务器——网络与安全——安全组——访问规则。本文采用Debian 12系统。原创 2024-05-22 00:00:00 · 859 阅读 · 0 评论 -
go项目实战——动手写分布式缓存GeeCache
GeeCache 的缓存全部存储在内存中,内存是有限的,因此不可能无限制地添加数据。假定我们设置缓存能够使用的内存大小为 N,那么在某一个时间点,添加了某一条缓存记录之后,占用内存超过了 N,这个时候就需要从缓存中移除一条或多条数据了。那移除谁呢?我们肯定希望尽可能移除“没用”的数据,那如何判定数据“有用”还是“没用”呢?原创 2024-04-30 01:00:00 · 1759 阅读 · 0 评论 -
golang学习笔记——FAQ 1.22.2
What is the purpose of the project?What is the history of the project?What’s the origin of the gopher mascot?Is the language called Go or Golang?Why did you create a new language?What are Go’s ancestors?What are the guiding principles in the design?Is Goog原创 2024-04-27 00:00:00 · 779 阅读 · 0 评论 -
golang学习笔记—— defer、panic 和 recover 处理错误
然后,程序会崩溃并记录日志消息。有时,你可能想要避免程序崩溃,改为在内部报告错误。异常的使用场景简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。通常情况下,当你想要避免忘记任务(例如关闭文件或运行清理进程)时,可以推迟某个函数的运行。通常,你会发送一条错误消息,说明为什么会进入紧急状态。Golang 没有结构化异常,使用 panic 抛出错误,recover 捕获错误。延迟调用中引发的错误,可被后续延迟调用捕获,但仅最后一个错误可被捕获。原创 2024-04-26 00:00:00 · 919 阅读 · 0 评论 -
go项目实战——Go微服务入门到容器化实践,落地可观测微服务项目
系统完整的Go微服务技术栈+实用容器化落地方案+服务级监控观测台。原创 2024-04-18 12:15:00 · 298 阅读 · 0 评论 -
go项目实战——自主开发PaaS平台核心功能
go项目实战——自主开发PaaS平台核心功能。原创 2024-04-16 13:30:00 · 192 阅读 · 0 评论 -
go项目实战——构建Go+ES8企业级搜索微服务
【代码】go项目实战——构建Go+ES8企业级搜索微服务。原创 2024-04-15 00:15:00 · 298 阅读 · 0 评论 -
100个Go语言典型错误
1.1 Go 大纲1.2 简单并不意味着容易1.3 100 个 Go 错误1.4 本章总结。原创 2024-04-12 14:26:10 · 1247 阅读 · 0 评论 -
go第三方库go.uber.org介绍
用于自动设置 GOMAXPROCS 以匹配 Linux 容器 CPU 配额的库。维护 golang/mock 的分支。一种静态分析工具,用于检测 Go 中潜在的零恐慌。Cadence 工作流编排引擎的 Go 客户端。用于将一个或多个 Go 错误组合在一起的库。Go 的 Thrift 编码代码生成器和库。在 Go 中快速、结构化、分级的日志记录。基于依赖注入的 Go 应用程序框架。一个基于反射的 Go 依赖注入库。Go 应用程序的配置库。Go 的消息传递平台。Go 的并发工具包。原创 2024-04-12 00:30:00 · 870 阅读 · 1 评论 -
golang设计模式图解——代理模式
正向代理是客户端的代理。它代表客户端(例如,浏览器)发出请求。客户端设置代理服务器,并通过它访问互联网上的资源。反向代理是服务器的代理。它代表一台或多台服务器接收来自客户端的请求。对于客户端来说,反向代理就像是它正在直接与后端服务器通信。原创 2024-04-06 11:24:20 · 1115 阅读 · 0 评论 -
golang设计模式图解——命令模式
命令模式为我们提供了一种将请求或操作封装到一个对象中的方法,它使我们的代码更具有可扩展性和复用性。希望本文能够帮助你理解命令模式,并在实际开发中找到其应用场景。原创 2024-04-06 09:51:19 · 939 阅读 · 0 评论 -
golang设计模式图解——模板方法模式
GoF提出的设计模式有23个,包括:(1)创建型(Creational)模式:如何创建对象;(2)结构型(Structural )模式:如何实现类或对象的组合;(3)行为型(Behavioral)模式:类或对象怎样交互以及怎样分配职责。原创 2024-04-05 00:00:00 · 797 阅读 · 0 评论 -
golang学习笔记——栈
在main函数中,我们创建了一个Stack对象,并分别将1、2、3三个元素加入栈中。然后我们调用Peek方法返回栈顶元素的值,调用Pop方法两次弹出栈顶元素并返回,最后调用IsEmpty方法判断栈是否为空。在计算机科学中,栈是一种线性数据结构,它具有先进后出(LIFO)的特点。栈通常用于计算表达式,处理递归函数,和其他需要后进先出的处理场景。在上面的代码中,我们首先定义了一个Stack类型,它是一个包含int类型的slice。方法用于返回栈顶元素的值,但不会弹出该元素,方法用于将一个元素添加到栈中,转载 2024-03-15 16:49:59 · 62 阅读 · 0 评论 -
golang学习笔记——type func实现事务
Go 语言中实现事务和 SQL 原生语句其实是非常接近的。执行一系列操作,如果发生错误,通过。回滚,如果没有发生错误,则通过。原创 2024-02-29 17:14:01 · 446 阅读 · 0 评论 -
golang学习笔记——missing go.sum entry for go.mod file
这是在迁移项目,复用模块的时候,遇到的错误。将前一个项目的代码复制到新项目的目录下,并将前一个项目的go.md里的内容,复制到新项目的 go.md 里造成的,这是因为代码中使用了第三方库,但没有更新 go.sum 文件。原创 2024-02-29 19:00:00 · 995 阅读 · 0 评论 -
golang学习笔记——Context 并发编程简明教程
WaitGroup 和信道(channel)是常见的 2 种并发控制的方式。会等待所有的子协程任务全部完成,所有子协程结束后,才会执行wg.Wait()后面的代码。WaitGroup 只是傻傻地等待子协程结束,但是并不能主动通知子协程退出。假如开启了一个定时轮询的子协程,有没有什么办法,通知该子协程退出呢?这种场景下,可以使用的机制。子协程使用 for 循环定时轮询,如果stop信道有值,则退出,否则继续轮询。更复杂的场景如何做并发控制呢?比如子协程中开启了新的子协程,或者需要同时控制多个子协程。转载 2024-02-29 00:00:00 · 154 阅读 · 0 评论 -
golang学习笔记——协程数量控制套路总结
尽管Goroutine(协程)非常清轻量,但是本身也是占用资源的,过多协程切换也会带来开销,总之物极必反,无限制的开协程的结果只会是Game Over。生产实践中必须考虑控制协程数量,本文带你看看针对不同场景和需求的协程数量控制方式。场景如下,go中一个典型场景是,接受数据然后开协程处理,代码如下├── go.mod必须要创建一个XXX_test.go的文件,并引入testing包代码import ("log""runtime""sync""testing""time"原创 2024-02-27 11:13:36 · 697 阅读 · 0 评论 -
golang学习笔记——vscode远程开发没有代码提示
国内 Go 语言实践圈子公认的 Go 语言专家超过 15 年互联网从业经验,曾在金山、盛大从事技术研究方面的工作,是 WPS 2005 的首席架构师。2011 年创办七牛云,致力于为客户提供一站式「云+数据」的服务和多场景解决方案。许式伟,七牛云创始人兼CEO ,ECUG 社区发起人 ,著有《Go语言编程》。《Go 语言程序设计》(译)。在win10下在代码提示,远程之后没有了。原来,这个插件远程也要安装一次。点击之后全选,然后点击OK就会自动下载安装。打开你的 PowerShell 并执行。原创 2024-02-09 23:56:03 · 1201 阅读 · 0 评论 -
什么是JWT
【代码】什么是JWT。转载 2024-02-07 20:35:24 · 66 阅读 · 0 评论 -
golang通用后台管理项目——Go+Vue通用后台管理项目实战
vue前端vue+axios+element-ui+echarts+vue-router+vuex+vue-treeselect。go后端 gin+gorm+swagger+reids+jwt+base64Captcha+mysql+yaml。2、掌握jwt,日志,跨域,鉴权中间件的使用。5、掌握go语言开发前后端分离项目的能力。6、从0到1开发完整前后端分离项目的能力。3、掌握基于gorm的sql多表查询。1、掌握组件中业务逻辑抽离的方法。4、掌握gin-swag的应用。原创 2024-02-06 11:16:08 · 1755 阅读 · 3 评论 -
golang学习笔记——面试题 使用 3 个协程顺序打印 cat、dog、fish 各 100 次
思考,可否换成无缓冲区的 channel。原创 2024-01-24 18:31:35 · 1573 阅读 · 0 评论 -
golang学习笔记——http.Handle和http.HandleFunc的区别与type func巧妙运用
的使用方法和面向对象编程差不多,第一步定义一个接口类型,第二步定义一个非接口类型,第三步在非接口类型上实现接口。使用上简洁一些,但原理比较复杂。先定义一个函数(参数类型,返回值都要和ServeHTTP一样),再将它强转为类型,类型有一个方法叫ServeHTTP,这方法会执行一个名叫f的函数,这个函数的类型就是。因为一个对象只要全部实现了接口中的方法,那么就实现了这个接口。所以,类型实现了这个接口。所以,我们只要写一个匿名函数,内部就会为我们转为类型。原创 2024-01-21 21:34:05 · 2165 阅读 · 0 评论