GoConvey是一款针对Golang的测试框架,可以管理和运行测试用例,同时提供了丰富的断言函数,并支持很多 Web 界面特性。 Golang虽然自带了单元测试功能,并且在GoConvey框架诞生之前也出现了许多第三方测试框架,但没有一个测试框架像GoConvey一样能够让程序员如此简洁优雅的编写测试代码
Golang1.17源码分析之select-006 Golang1.17 学习笔记006 源码地址:runtime/select.go 数据结构: type scase struct { c *hchan // chan elem unsafe.Pointer // data element } 核心函数:selectgo() order0 为一个两倍 cas0 数组长度的 buffer,保存 scase 随机
主要结构图 入口函数 cmd/nginx/main.go func main() { klog.InitFlags(nil) rand.Seed(time.Now().UnixNano()) fmt.Println(version.String()) showVersion, conf, err := parseFlags() if showVersion { os.Exit(0) } if err != nil { k
首先我们来归结分布式缓存的主要组成: 分布式,每个结点自身能提供缓存服务,也能向其他节点请求服务。 缓存,缓存的策略众多,GeeCache采用的是LRU策略。 缓存 LRU 核心是两个数据结构,字典和双向链表。其中,字典存储键和值的映射关系,查找对应值的复杂度为O(1)。然后具体存储值的是双向
kube-scheduler源码分析(1)-初始化与启动分析 kube-scheduler简介 kube-scheduler组件是kubernetes中的核心组件之一,主要负责pod资源对象的调度工作,具体来说,kube-scheduler组件负责根据调度算法(包括预选算法和优选算法)将未调度的pod调度到合适的最优的node节点上。 kube-scheduler架
在kubernetes二次开发-Kubebuilder最佳实践中,我们简单使用了Kubebuilder来资源创建、验证等操作,那么你一定很好奇,程序是如何连接到Kubernetes的,下面我们来简单看下。 来到main.go mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: s
概述 我们知道 Seata Java Client 的 AT 模式,通过代理数据源,实现了对业务代码无侵入的分布式事务协调机制,将与 Transaction Coordinator (TC) 交互的逻辑、Commit 的逻辑、Rollback 的逻辑,隐藏在切面和代理数据源相应的代码中,使开发者无感知。那如果这个方法,要用 Golang
序幕 这篇文章是集成测试系列两个部分中的第二部分。你可以先读 Go 语言中的集成测试:第一部分 - 用 Docker 执行测试。本文中的示例可以从 代码仓库[1] 获取。 “比起测试行为,设计测试行为是已知的最好的错误预防程序之一。” —— Boris Beizer 在执行集成测试之
背景 面对kv类型数据在公司的存储量越来越大,以及在性能响应不敏感的情况下,利用原生的codis方案来存储数据的方案,成本也越来越高,在这种场景下,急需一种替代方案能够有效兼顾成本与性能。故引入了pika来作为codis的底层存储,来替换成本较高的codis-server,并围绕pika的方案进行了
sync pool使用来存放临时变量的一个缓冲区,但是这个缓冲区并不可靠,每次gc的时候,都会首先清除缓冲区,所以,假如一个slice仅仅存放在 Pool 中,而没有其他地方引用,则会被当成垃圾清理掉。 概念 A Pool is a set of temporary objects that may be individually saved and retrieved.
反转链表的几种方法 1-最基础 func reverseList_1(head *ListNode) *ListNode { if head == nil { return nil } if head.Next == nil { return head } p := head q := p.Next s := q.Next for s != nil { q.Next = p p = q q = s s = s.Next } q.Next = p
Go代码规范(Code Review) 总结几个开发过程中经常会犯的代码规范错误 参考链接:https://learnku.com/go/wikis/48375 注释语句 // Request 表示运行命令的请求。 type Request struct { ... // Encode 将 req 的 JSON 编码写入 w 。 func Encode(w io.Writer, req *Request) { ...
grpc的流模式例子 工程结构: stream_grpc_test ├─client │ client.go │ ├─proto │ stream.pb.go │ stream.proto │ └─server server.go proto文件: syntax = "proto3"; option go_package = "./;proto"
文章目录 最强解析面试题:链表中倒数最后k个结点题目代码 附录 最强解析面试题:链表中倒数最后k个结点 文章讲解 “ 链表中倒数最后k个结点 ” 经典面试题,包含思路及源码,及解惑! 题目 输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。 如果
转载自 Ali Josie-Build Containers From Scratch in Go 2020/9/17,在过去的几年里,容器的使用量显著增加。容器的概念已经出来好多年了,但是由于Docker易于使用的命令行使得容器从2013年开始在开发者里流行(我觉得主要是可复用的镜像)。 在这个系列中,我将尝试演示容器底层是如何工作的
package pkg import ( "crypto/tls" "errors" "io/ioutil" "net" "net/http" "strings" "time" ) type HTTPClient interface { Do(req *http.Request) (*http.Response, error) } var (
cAdvisor是一款强大的 Docker Container 监控工具,方便容器用户,对运行中的容器进行资源使用和性能分析。用于收集、聚合、处理和导出运行中容器的信息。cAdvisor提供了对Docker容器的原生支持,并且应该支持任何其他容器类型。 Kubelet内置了对cAdvisor的支持,用户可以直接通过Kubelet
【TcaplusDB知识库】Tcaplus Go SDK手册(一) 1 使用准备 本API是Tcaplus API的Go封装,支持Generic表的增删改查 1.1 各代码目录 pack为打包脚本 example为示例 aurotest为测试工具 其他目录为Tcaplus Go API的源码 vendor 中为依赖库的代码,需要使用git submodule init和git
【TcaplusDB知识库】Tcaplus Go SDK手册(一) 1 使用准备 本API是Tcaplus API的Go封装,支持Generic表的增删改查 1.1 各代码目录 pack为打包脚本 example为示例 aurotest为测试工具 其他目录为Tcaplus Go API的源码 vendor 中为依赖库的代码,需要使用git submodule init和git
前言 在研发之旅的不断深入中,愈发感到在接到需求后,画出实现的逻辑图是十分必要的。本篇将试图通过对容器平台工作负载的扩缩容/启动/停止/重启需求来验证前面一句。 需求分析 本需求可分为两大类: 1、扩缩容/启动/停止 本质是对Pod的副本数的变更操作 2、重启 本质是对 ReplicaSet
队列的定义 队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构,与栈结构不同的是,队列的两端都"开口",要求数据只能从一端进,从另一端出。队列有两种存储方式,分别是顺序队和链队,今天实现的是链队。 结构的定义 队列需要两个指针定位对头和队尾的位置,所以定义方式
一. 数字签名 设想一个场景:Alice 给 Bob 发送了一段消息(明天我请你吃饭),该消息使用 Bob 的公钥加密(公钥加密才能确保消息被截获后也只有 Bob 本人能用自己的私钥解密),但是由于 Bob 的公钥可能其他人也有,Tom 也可以使用 Bob 的公钥加密信息后发送给 Bob,所以 Bob
简介:容器镜像在我们日常的开发工作中占据着极其重要的位置。通常情况下我们是将应用程序打包到容器镜像并上传到镜像仓库中,在生产环境将其拉取下来。然后用 docker/containerd 等容器运行时将镜像启动,开始执行应用。但是对于一些运维平台来说,对于一个镜像制品本身的扫描和分析才
https://studygolang.com/articles/19475 在这一章我们将学习如何使用 Go 语言将数据写到文件里面。并且还要学习如何同步的写到文件里面。 这章教程包括如下几个部分: 将字符串写入文件 将字节写入文件 将数据一行一行的写入文件 追加到文件里 并发写文件 请在本地运行所有本教
基础特性 lua中不需要分号作为语句的结束点 注释语句 -- 单行注释 --[[ 注释语句 ]]-- ..操作符可以用于拼接类型,拼接后的结果是string(nil不支持拼接) a = 123 .. 456 -- data type is string -- data is 123456 print("data type is " .. type(a) .. "\n" .. "data is " .. a)