
golang
文章平均质量分 82
inthirties
程序员紫龙,喜欢编程,热爱编程的老年程序员
展开
-
ClickHouse 大数据量的迁移方式
关于Clickhouse 备份方式,其官方网站上就提供了多种备份方式可以参考,不同的业务需求有不同的使用场景,需要使用不同的备份方式,不存在一个通用的解决方案可以应对各种情况下的ClickHouse备份和恢复。今天这个文字,我们介绍的是各种不同的Clickhouse的迁移方式,具体使用场景还需要根据要求进行选择。原创 2022-12-29 11:25:12 · 7880 阅读 · 0 评论 -
Go-Gateway反向代理,性能比拼Nginx
在以前的一篇文章《基于Fasthttp实现的Gateway,性能媲美Nginx。原创 2022-10-07 10:50:55 · 2635 阅读 · 0 评论 -
Etcd可视化管理工具
etcd是一个高可用、强一致性的服务发现存储仓库的,是k8s里的一个基础组件,现在随着k8s的不断的被企业所使用,etcd也越来越被看好作为服务发现的好的组件之一;今天这个文章看看一款用来对etcd进行管理的图形化管理工具 etcdv3-browser;租约管理租约是etcd里很有用的功能,通过租期来控制key的过期时间,和redis里的expiredtime一样的功能,在etcdv3-browser里可以查看和管理租期直接给key增加租期查询租期, 可以根据租期ID进行过滤查询。原创 2022-09-07 11:01:27 · 7192 阅读 · 5 评论 -
深入浅出GO GC垃圾回收
Go语言和其他多数高级编程语言如Java一样,编程语言提供了自动进行内存管理的机制,称之为Garbage Collection(GC);GC自动释放不再使用的对象所占有的内存,而不需要开发人员手动销毁去销毁此对象的内存空间;其中过程中完全有GC机制处理,而无需开发人员手工介入。原创 2022-09-06 13:33:53 · 554 阅读 · 0 评论 -
从IDEA开始,迈进GO语言之门
笔者在学习GO语言编程的时候,GO语言在国内还没有像JAVA/Php/Python那样普及,绕了不少的弯路,要开始入门学习一门编程语言,最好就先从选择一个好的编程语言的开发环境开始,有了这个开发环境,我们就是使用开发环境,来非常高效的去学习这门语言的语法;原创 2022-09-02 10:50:08 · 2634 阅读 · 0 评论 -
GO语言的错误处理
在GO语言里,没有类似Java那么强的面向对象的特性, 可以通过结构体实现Error方法,来自定义一个错误对象类型;例如。原创 2022-09-01 11:38:08 · 845 阅读 · 0 评论 -
Docker实战-使用HAProxy实现4层的负载均衡
上一篇文章《Docker实战-使用Nginx实现4层的负载均衡》给大家实战使用docker,部署Nginx来实现4层负载均衡。今天这个文章咱们来来看看另一个负载均衡利器HAProxy在Docker里如何进行部署,来实现4层负载均衡。HAProxy是一款开源的、高性能的、基于TCP(第四层)和HTTP(第七层)应用的负载均衡软件,借助HAProxy可以快速、可靠地提供基于TCP和HTTP应用的负载均衡解决方案。...原创 2022-08-31 12:50:17 · 2181 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(十)
函数是各种编程语言里组成编程逻辑的主要部分;特别在Go语言中,Go语言削弱了面向对象编程的一些特性,比如构造函数,多态,抽象等,在函数式编程方面进行了类似于javascript和python等语言的借鉴,由此在咱们的第四章函数章节里,已经就细化了十个章节来进行各个方面的介绍。今天的这个文章,接着一文中对defer和recover的介绍,进一步深入的通过代码样例来学习函数。Recover的顺序。...原创 2022-08-31 09:41:44 · 187 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(九)
在前面的介绍函数的文章时候,就在java和go对异常处理的地方提到过这个defer函数,defer是go语言里进行延迟调用的一种机制,defer后面的函数不会马上就执行调用,只有在当前调用defer函数的函数完全执行完毕后才会执行defer函数,基于这样的调用机制及原理,defer函数通常都用来进行资源的释放。例如}TestDefer Func如上述代码,通过defer执行的函数fmt.Println并不会马上执行调用,而是在执行defer函数的函数执行完毕后再进行执行;...原创 2022-08-30 13:29:30 · 240 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(八)
作为一个数据类型的对象,函数当然可以放到切片里面,map里面,可以赋值给一个变量,可以作为参数传递,也可以作为函数值进行返回。如上段代码,代码定义了函数名为adder的函数, 函数没有定义传入参数,但是定义了返回值,返回值是func(int) int, 即返回值是一个函数, 而且该函数定义一个传入参数,参数数据类型是整数型, 该函数还定义了一个返回值,返回值类型也是int,整数型类型;上面的代码可以可以改写成如下代码。下面我们通过一个代码样例,来看看作为函数返回值的函数对象,如何使用;......原创 2022-08-29 13:59:16 · 414 阅读 · 0 评论 -
一个非常不错的开源Docker管理工具-DockerUI
Docker主机管理数据卷管理,镜像管理,容器管理,构建管理,仓库配置管理,网络配置管理Docker Swarm集群管理集群概要信息,节点管理,Service管理,任务管理,密码管理,配置管理任务编排Docker任务编排,Docker Swarm任务编排。......原创 2022-08-26 10:41:38 · 2010 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(七)
接着定义一个toTrim的函数,该函数实现对传入字符串进行去除空格处理, 最后定义一个toTrimPrefix的函数,将传入字符串前AAA字符串进行出除。在PrintFibonacci函数里, 把接收到的整数类型n,作为参数传递到fibonacciWorker这个传入的函数类型,并执行fibonacciWorker函数,返回整数型类型的数组,然后把此类函数类型作为参数传入, 在外部调用时, 把具体的实现作为参数对这个方法进行调用,就可以达到实现和接口的隔离了。第一个参数是整数类型,传入调用的n值,...原创 2022-08-26 10:19:50 · 202 阅读 · 0 评论 -
golang中的三个点 ‘...‘ 的用法
它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。第二个用法是slice可以被打散进行传递。’ 其实是go的一种语法糖。原创 2022-08-25 11:27:14 · 2024 阅读 · 0 评论 -
K8s API快速入门
上一篇文章《Docker Restful API快速入门》介绍了有关Docker API的快速入门,今天这个文章给大家介绍一下K8s API的入门。 下载K8s的API, k8s的API是OPENAPI的标准,可以从github.com/gohutool/docker.ui项目进行下载, 文件名k8s.swagger.json打开Postman,点击File-》Import 如图这里就已经成功的导入了K8s的API至Postman里, 接下来,我们测试一个响应的API, 查看Pods执行出现错误原创 2022-08-25 10:33:11 · 855 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(六)
匿名函数和闭包Go语言支持匿名函数,在前面就讲到过,在Go语言里,函数更像是定义的一个函数类型的对象;在Go语言里,匿名函数更复合这个特性;匿名函数可以在需要使用函数时再定义函数,匿名函数没有函数名只有函数体,这样GO语言的匿名函数作为一种类型被赋值给函数类型的变量,匿名函数也往往以变量方式传递,这与C语言的回调函数比较类似,不同的是,Go语言支持随时在代码里定义匿名函数。 下面来具体介绍一下匿名函数的定义及使用。原创 2022-08-25 09:43:14 · 229 阅读 · 0 评论 -
Docker Restful API快速入门
Docker Engine提供了Restful API供Docker Cli调用, 和普通的Web API一样, Docker提供的API也可以直接通过URL进行调用。DockerUI就是通过Docker Engine提供的API,实现和Docker Daemon的交互,并完成对Docker节点的管理功能。今天这个文章就介绍一下,我们如何来获得Docker Restful API并进行API的调用。原创 2022-08-24 10:11:55 · 2076 阅读 · 1 评论 -
爱上开源之golang入门至实战第四章函数(Func)(五)
变长函数的最后一个参数是采用 ...type 的形式,那么这个函数就可以处理一个变长的参数,这个长度可以为 0,这样的函数称为变参函数。如上个例子,我们就定义了一个Average的变长参数的函数,Average函数参数定义为...int,表示处理一个int类型的变长参数,函数的实现,是变量所有的参数,然后累加计算平均值。这里的代码,也是一个变长参数的函数的使用例子, golang里内置的append函数也是一个变长参数的函数, 参考builtin.go代码。在上面的例子里,定义了Says变长参数的函数;原创 2022-08-24 09:27:48 · 200 阅读 · 0 评论 -
如何开启Docker的TCP通信端口
Docker Engine提供RestFul API, Docker Cli通过Restful API和Docker Daemon进行交互,默认情况下,docker cli通过unix通道文件和Daemon进程进行交互,也可以通过docker cli里的--host参数指定,需要通信的Docker远端机器进行交互, --host参数指定,需要进行连接的Docker daemon的监听端口。默认情况下,Docker的socket tcp端口是没有打开的,只提供本地的unix的通道文件的通信方式。原创 2022-08-23 12:53:05 · 3555 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(四)
在Go语言里没有这个Exception Stack,对于JAVA语言诞生而言,其就是关注与服务器端的应用业务, 而Go的诞生是来作为拥抱云原生的服务组件,可能exceptoin的损耗反馈到业务系统里可以忽略不计,但是对于面向低层的服务,这些损耗不能不计。可以看到这个列子就能够充分看到带命名的返回参数,所带来的语言之美,不仅仅是省略了一个返回值的定义的过程,这里的返回值和参数一样的性质,值传递,还是引用传递,Go适合于较低层的服务的实现,恰恰就是这些特性非常符合低层服务的编程习惯。上面的例子,可以改写为。原创 2022-08-23 11:35:38 · 216 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(三)
上方定义了一个exchange的函数,函数的传入参数是a,b两个int类型的数字, 函数交换两个参数的数值,这个函数的运行结果就可以充分的演示出按值传递的效果, 参数的参数都是副本, 所以执行结束以后,原有的a,b两个原值在函数体里都是在对副本进行的操作,函数体执行结束,a,b继续使用原值,所以执行完exchange以后,a,b值不会发生变化。调用都是更高效的调用,从基本上来说,至少传递指针的方式,只是一个32位或者64位值的复制,而值传递的方式,就是要对传递的对象进行值拷贝。品味1: 如何完成值交换的?原创 2022-08-22 11:41:49 · 176 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章-函数(func)(一)
函数是各种编程语言不可缺少的一部分,编程的过程也就是通过函数的实现和调用来完成我们需要达到的编程的目的;把函数这个章节的内容归入到了数据类型;我一直犹豫不决;按照一般的出牌顺序,函数就处于编程的过程,不应该纳入到数据类型里来,但是我觉得纳入到这里,能够更加明显的体现出go语言里的函数所不同的地方。下面就听我来叨咕叨咕,golang里的函数。...原创 2022-08-12 10:47:10 · 565 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章-映射(Map)
出于对性能的考虑,对于大的 map或者会快速扩张的 map,即使不是非常明确具体的容量大小,也最好先根据初略的计算,大概的标明Map的大小。由于Map的value可以是任何类型的值,也包括nil,所以我们可以将一个nil对象作为value放入Map对象, 时候返回值也为nil,但是key是存在的;Go语言原生的Map非并发安全的, 在多并发的情况下,如果有写的操作,会出现Panic,提示concurrent map writes的错误。由于Map是无序的,迭代的过程不能保证返回次序,返回的顺序;...原创 2022-08-11 11:34:28 · 414 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章-切片(Slice)
Go 语言切片是对数组的抽象。一个slice类型一般写作[]T,其中T代表slice中元素的类型。slice的语法和数组很像,只是没有固定长度而已。数组和slice之间有着紧密的联系。一个slice是一个轻量级的数据结构,提供了访问数组子序列 (或者全部)元素的功能,slice的**底层引用一个数组对象**。`slice`(切片)代表变长的序列,序列中每个元素都有相同的类型。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组")原创 2022-08-10 09:37:51 · 150 阅读 · 0 评论 -
爱上开源之DockerUI-自建Docker镜像仓库实战
这篇文章,记录了有关使用Docker Registry进行私有Docker仓库的安装实战过程; 并进行了Pull和push的测试。 在下一个文章里,我们会介绍另一个使用非常广泛的另一个Registry产品Nexus, Nexus不仅支持全面的Docker Registry V1.0和V2.0接口标准;还拥有简单而方便的操作界面,和更强大的管理支持。 敬请各位朋友下一期关注。...原创 2022-08-08 14:52:47 · 735 阅读 · 0 评论 -
爱上开源之dockerUI强大docker管理工具,没有之一
但是通过对各产品的使用和比较,docker不会落寞,而且在中小规模的应用体上将重新主导天下,k8s很多概念都是借鉴docker的,而且k8s主要做编排,和dockerswarm是相争的,容器嘛,redhat的libpod,只能呵呵两声,谁用谁知道该怎么去骂他,指的是单独使用,没有使用k8s编排,其他的容器产品呢,基本都是在开源的containerd的基础上实现的。打开容器后,可以查看容器的具体信息,和相关容器的操作。镜像的详情信息,让镜像的所有信息一览无余,如图里所示,是镜像的构建历史。...原创 2022-07-25 18:38:25 · 3368 阅读 · 1 评论 -
爱上开源之golang入门至实战第四章-数组 隐藏的性能陷阱
数组是具有相同唯一类型的一组已编号且长度固定的数据序列(所有的数据项目都是相同的数据类型);元素的数据类型可以是任意的原始类型例如整型、字符串或者自定义类型。数组长度必须是一个常量表达式,且必须是一个非负整数。 相对于去声明 number0, number1, ..., number99 的变量,使用数组形式 numbers[0], numbers[1] ..., numbers[99] 更加方便且易于扩展。 数组长度也是数组类型的一部分,不同的长度,不同的数据类型都属于不同的数组类型; 数组元素可以通过索原创 2022-07-11 16:42:59 · 212 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章-数据基本类型
爱上开源之golang入门至实战第四章-数据基本类型在Go编程语言中,数据类型用于声明函数和变量。Go 语言中有丰富的数据类型,用来表示基本类型的整型、浮点型、布尔型、字符串等,Go 语言的基本类型和其他语言大同小异,在基本类型的汽车上,Go语言还有其特有的数组、切片、结构体、函数、 map、通道( channel ),自定义类型等。 切片类型有着指针性,但比指针更为安全,很多高级语言都配有切片进行安全; Channel通道类型是天生为多并发而设计的;这些数据类型在Go的高性能编程里都特别的常用;4.1.1原创 2022-07-11 10:53:28 · 206 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章-内存逃逸
如上面我们介绍的,内存的分配可以在堆上也可以在栈上,当然内存在栈上分配更快,并且栈上的内存不需要GC,入栈出栈直接回收。通常情况下,函数的内部中不对外开放的局部变量,并只作用于当前函数中的变量,它的内存是分配在栈中。执行函数前会执行进栈操作,函数结束后会出栈,同时释放内存。 但是由于某种原因,原本是该分配到栈上的变量,跑到了堆上,这就导致了内存逃逸。 常见的 go、java 语言都会有内存逃逸的情况,我们常用的函数以及局部变量通常是分配到栈上的,但是一旦出现内存逃逸,变量就会分配到堆上。逃逸后果栈是高地址到原创 2022-07-08 14:41:32 · 296 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章goroutine分析
爱上开源之golang入门至实战第三章 - goroutine分析Pprof中的Goroutine是对当前时间点的goroutine(协程)数据的采样,我们经常使用pprof对可能发送goroutine(协程)泄漏的可能点进行分析;goroutine(协程)泄漏是goroutine启动之后没有退出导致goroutine的数量不会减少,或者是在实际应用中goroutine占用了很长时间才退出导致在一段时间内goroutine的数量急剧上升; 虽然goroutine(协程)相对于线程的开销来说更加的轻量级,但是原创 2022-07-06 11:04:56 · 678 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章-内存Alloc分析
Allocs也是关注与内存方面的数据采样,而且由于Allocs的采样数据和Heap的采样数据大致上都是一样的。所以很多golang的开发人员非常容易忽略这个Allocs的数据采样 上面就是Allocs的数据采样的文本格式的内容; 和Heap的对照一下,确实发现是一致的; 我们可以详细查看pprof输出allocs的源代码 line 546 行函数的实现。可以发现Heap和Allocs两者都是使用同一个函数进行输出的;在同一个时间点的采样上,输出的数据就是一致的。虽然Heap和Allocs两者的数据样本一致原创 2022-07-05 10:51:23 · 1070 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章-性能分析-Heap
Heap Memory Heap: A sampling of memory allocations of live objects. You can specify the gc GET parameter to run GC before taking the heap sample.添加gc这个parameter到get的url里, 可以在采样之前强制执行一次GC后,再进行采样;来之pprof.go(net/http/pprof.go)源码 Heap的手工埋点如果是Run over Once的工具包,原创 2022-07-04 11:14:57 · 449 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章-性能分析-分析数据
我们使用上面的两种方法采集到运行的golang程序的性能数据样本后,下面就可以用我们第一步,安装的pprof工具来查看性能数据了, pprof可视化分析工具,主要是对样本数据文件进行解析,提供解析后的性能数据给我查看。现在我们通过一个实例来详细的介绍一下性能分析的过程。 通过pprof的来查看笔者的一款基于fasthttp服务的性能数据由于是一个非http底层的服务,fasthttp本身有兼容pprof的实现方式,但是笔者简单的还是通过另其一个单独的http服务来实现;仅仅只是为了演示而已;在真实的场景里,原创 2022-07-01 12:23:15 · 601 阅读 · 0 评论 -
爱上开源之boot4go-dockerui-剧透篇
前面分别开源分享了两个产品系列今天在这里给大家剧透的是,产品系列三, 主要是针对docker的使用和管理的相关产品; 细心的朋友,其实在前面的文章里,就已经看到有关这个产品的信息了,在前面有文章介绍了一个产看docker容器运行指令的一个docker镜像,就是产品系列之一。这个只是个开胃菜。这个才是这个系列里的主要核心, docker和docker swarm集群的可视化管理平台。现在项目的名称暂时定为 boot4go-dockerUI。 通过这个项目名称,应该大致可以看到产品的功能是和docker相关的原创 2022-06-30 12:26:55 · 492 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章-性能分析PPROF
如同上一节内容介绍的,不论哪种语言,我们在进行开发的时候,都必须致力于能够尽可能的提升程序的运行效率和稳定。Golang提供了工具包PPROF(Program Profiling),Golang Pprof是一种对golang开发的程序进行可视化和分析性能数据的工具。3.4.1 工作原理性能分析的工作原理大致上都是类似的;从过程上都包括两个部分性能数据样本采集样本数据的分析golang pprof也由这两个过程组成,不同的过程,由不同的组成部分实现;在性能数据样本采集的过程中;golang pprof通过在原创 2022-06-29 13:04:38 · 290 阅读 · 0 评论 -
爱上开源之golang入门至实战-第二章语言基础-内存管理
2.5.1.6 内存管理作为入门学习一门编程语言;我们还是必须要对该语言编译及运行时的内存分配有一定的了解,这样可能你会更容易去深深的理解语言基础中的一些问题;这里我们也简要的了解一些Golang里变量的内存分配的基础知识计算机组成里两个非常重要的概念:堆和栈( Stack )是一种拥有特殊的线性表数据结构;栈只允许往线性表的的顶端放入数据,顶端取出数据,按照后进先出(LIFO,Last In First Out )的顺序进行数据读写的操作; 往栈中放入元素的过程叫做入栈。入栈会增加栈的元素数 ,最后放入的原创 2022-06-28 12:39:29 · 228 阅读 · 0 评论 -
爱上开源之golang入门至实战-第二章语言基础-作用域
2.5.1.5 作用域和所有的编程语言一样;变量的使用范围是存在作用域的,超过变量的作用域,外部对变量是不能进行使用的。如果一个变量在函数体或者结构体之外进行声明的话,则此变量的作用域是全域;也被称为全局变量;全局变量,可以在这整个包或者引用该包的外部进行使用;提示在函数体内声明的变量,相对于上面所提到的全局变量,可称为局部变量;局部变量的作用域仅仅只存在函数体内;局部变量的作用域可以通过代码块(用大括号括起来的部分)判断,局部变量在其作用域(代码块)结束后,局部变量释放,内存地址被回收。在同一个代码块内部原创 2022-06-27 14:17:58 · 198 阅读 · 0 评论 -
爱上开源之golang入门至实战-第二章语言基础-变量
变量和常量都是数据类型的载体,从名称上就可以看出常量和变量的不同,常量表示不能改变的数值,而变量表示能够改变的数值。这里先来看一个示例代码。func printSize() { const PI float64 = 3.14 // 定义一个名为PI的常量 var r, v float64 // 定义名为r, v的变量, 变量定义,r,v值均为0 fmt.Printf("r的值为%f,v的值为%f\n", r,原创 2022-06-24 12:22:40 · 212 阅读 · 0 评论 -
爱上开源之golang入门至实战-第二章语言基础
在上一章中,读者已经了解了如何搭建Golang开发环境及开发环境及程序的开发过程。从本章开始,我们开始讲解golang语言基础,这些基本语言的语法和其他一些编程语言相比有些是类似的,但还有很多不同之处,不管读者是否以前学习过其他一门的语言,都最好花一定的时间来了解这些golang最基本的语法。Golang程序代码是由很多字符部分组成,其中任何一个字符部分都有它存在的意义。这些部分就是构成Golang程序代码的基础要素。本节就来讲解这些基础要素。代码样例一段完整的GO语言的代码通常情况下由下面几个部分组原创 2022-06-23 11:32:48 · 304 阅读 · 0 评论 -
爱上开源之golang入门至实战-使用IDE开发Golang
使用IDE开发Golang上一节,使用文本编辑器,我们开启了golang之旅,除了通过文本编辑器的方式来进行程序开发,我们还可以通过使用golang的集成开发环境工具(IDE)来进行更高效率,更快速的golang语言编程的开发。 很多刚刚入门的朋友,都没有找到一个非常方便易用的IDE工具,而因为复杂的编程和调试步骤,在这一步选择了放弃。笔者在刚入门进行golang语言开发的时候,绕了不少的弯路, 这个golang的IDE工具的选择便是其一, 那时国内golang不太普及,有关golang的开发工具介绍比较少原创 2022-06-22 12:26:01 · 3623 阅读 · 1 评论 -
爱上开源之golang入门至实战-第一章golang起步
Go编程语言是一个开源项目,旨在提高程序员的工作效率。Go表达力强、简洁、干净、高效。它的并发机制使编写程序变得容易,从而最大限度地利用多核和网络化机器,而它的新型系统支持灵活和模块化的程序构造。Go可以快速编译为机器代码,同时还具有垃圾收集的便利性和运行时反射的功能。它是一种快速、静态类型的编译语言,感觉就像一种动态类型的解释语言。以上对golang的介绍,完全来自于golang的官方网站, golang是创造于google公司的三个大牛级工程师Robert Griesemer, Rob Pike和Ken原创 2022-06-21 12:23:20 · 586 阅读 · 0 评论