Go语言环境搭建详解(2020版)

最近写了很多Go语言的原创文章,其中Go语言实战系列30篇,近15W字,还有最近更新的Go经典库系列,不过通过大家的咨询来看,还是想要一些入门的知识,这一篇文章写于2017年初,这3年多Go更新了很多版本,所以需要更新下这篇文章。 提示:本文基于Go语言最新版 go1.15.3 写成。 有读者来信(微……

阅读全文

Go语言 | 几种常用的排序算法图文解析

作为一个小项目,我已经使用Go编写了一些著名的排序算法。希望对你有用! 冒泡排序 冒泡排序是一种非常容易遵循的算法。你需要遍历数组中的每个元素,以查看它是否更大,如果需要,则需要交换它们。你应该多次执行此任务,最终将不需要任何交换操作,也就是完成了排序。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15……

阅读全文

1024程序员节 | 不要让程序员成为你唯一的标签

1024在计算机中是一个神奇的数字,1GB=1024MB,1MB=1024KB,1KB=1024B,而2的十次方也是1024,二进制是计算机中最基本的计数单位,在每年的10.24这一天被称为程序员节。 对于程序员来说,如果编程是你赖以生存的硬核技能,那么我认为你还应该掌握编程之外的……

阅读全文

从源代码级别看懂MinIO对象存储网关的实现

我在 《MinIO对象存储的网关架构设计》一文中介绍了MinIO的网关架构设计,它的整体架构如下图所示: 从架构图可以很清楚的看到MinIO网关的分层结构,那么这一篇我就从MinIO网关的具体代码分析它是如何实现的。 网关启动 MinIO内部已经实现了GCS、S3、NAS等几个网关,支持……

阅读全文

MinIO对象存储的网关架构设计

MinIO是一个非常轻量的对象存储服务,它只有一个二进制文件即可运行,快速的构建分布式的对象存储集群,适合存储大容量的非结构化数据,比如图片、日志文件等这些。 MinIO除了可以作为对象存储服务外,还可以作为网关,也就说MinIO的后端可以NAS系统、HDFS分布式文件系统或者S3……

阅读全文

Go语言|go version命令的高级用法

go version这个命令相信大家已经非常熟悉了,使用它可以查看我们自己电脑上的Go SDK版本。 1 2 $ go version go version go1.15 darwin/amd64 以上就是我们经常使用到的功能,可以查看自己的Go版本和系统架构的信息。 但是这其实是go version最基本的用法,因为我们没有为它提供更多的参数信息,所以它默认的打印的……

阅读全文

Go语言|基于channel实现的并发安全的字节池

字节切片[]byte是我们在编码中经常使用到的,比如要读取文件的内容,或者从io.Reader获取数据等,都需要[]byte做缓冲。 1 2 func ReadFull(r Reader, buf []byte) (n int, err error) func (f *File) Read(b []byte) (n int, err error) 以上是两个使用到[]byte作为缓冲区的方法。那么现在问题来了,如果对于以上方法我们有大量的调用,那么就要声……

阅读全文

不考虑用户体验的编程语言都是耍流氓

其实这篇文章应该还可以有个副标题—为什么选择Go语言。很多时候,我们在做一个需求的时候,很多编程语言都可以,但是为什么选择这个,而不是那个,甚至说为什么选择Go语言,而不是其他编程语言?今天我抛开特定业务只能选择某种特定的编程语言除外,对比下有多种语言选择的情况下,G……

阅读全文

聊聊越来越火的对象存储

随着云计算的发展,云存储作为一种更基础的云上资源池设施也越来越受到重视和欢迎。从云存储的类型来讲,目前流行的有块存储、文件存储和对象存储三种。今天的主角是对象存储,不过我们在介绍对象存储之前,先来了解下另外两种存储,做个对比,这样才能更好的了解对象存储。 块存储是什么? 对于这些概念……

阅读全文

Go语言 | 从并发模式看channel使用技巧

最近重看MinIO的源代码,发现纠删码模式下读取数据盘的时候,使用了更简单的并发读取方式,以前看的时候没发现,查了下Git历史记录,发现是19年新改的,新的使用channel做标记的方式的确非常巧妙,简化了代码逻辑,值得我们学习。所以今天就开篇文章,介绍下channel在并发下的……

阅读全文

最近文章

分类

标签

其它