包含标签 golang 的文章

提升 Go 编码效率,拒绝加班,真香

在 Go 语言中,slice、map都是我们常用的基础类型,通过它们,我们可以很容易的使用数据。但是你有没有发现,为了对这两种数据进行处理,你不得不编写很多工具函数? 比如,从slice切片中查找一个元素的位置?这种查找又分为从前查找、从后查找。 又比如,获取map的所有keys?或者所有……

阅读全文

Go 1.18 的工作区模式

当一个项目越来越复杂的时候,一定会拆分为多个模块,以便进行代码复用和更好的多人协作开发。 假设我们已经有了两个模块 flysnow.org/util 和 flysnow.org/product ,模块flysnow.org/product依赖 flysnow.org/util 。 现在有一个需求,需要同时修改这两个模块,以便让flysnow.org/util新增的方法给模块flysnow.……

阅读全文

Go 团队在 GopherCon 2021 上的演讲:Go 1.18 泛型简介

介绍 这篇博文基于我们在 GopherCon 2021 上的演讲: Go 1.18 版本增加了对泛型的支持。泛型是自第一个开源版本以来我们对 Go 所做的最大改变。在本文中,我们将介绍新的语言功能。我们不会试图涵盖所有细节,但我们会触及所有要点。有关更详细和更长的描述,包括许多示例,请参阅提案文档。有关语言更改的更准确描述,请参……

阅读全文

Go 1.18 发布了,不用翻墙即可下载!!!

昨天,Go 团队终于发布了 Go 1.18,你可以通过访问 下载链接1 获取,虽然晚了一个月。 据 Go 团队介绍,Go 1.18 是一个大型版本,其中包括新功能、性能改进以及对 Go 语言本身做了非常大的更改。毫不夸张地说,Go 1.18 的部分设计始于十多年前 Go 团队第一次发布 Go 时。 泛型 在 Go 1.18 中,引入了对 参数化类型的泛型代……

阅读全文

Go语言实现SSH弱口令爆破

随着云服务的兴起,拥有一台主机不再是一件很昂贵的事情,比如你在xx云购买一个主机,一年也只需要几百元,购买的主机可以用来搭建博客、网站或者自己做测试使用。 购买了云主机后,常用的管理方式就是使用SSH,这是一个很方面的工具,可以让你登录远程系统,就像在自己的shell中操作一样。 但……

阅读全文

Go 语言 | 1.16 新增的embed在各流行Web框架中的应用

什么是 Go embed 在前几天刚发布的Golang 1.16版本中,新增了一个大家期待已久的特性//go:embed,它的作用就是可以在Go语言应用程序中包含任何文件、目录的内容,也就是说我们可以把文件以及目录中的内容都打包到生成的Go语言应用程序中了,部署的时候,直接扔一个二进制文件就可以了……

阅读全文

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语言 | 从并发模式看channel使用技巧

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

阅读全文

Go语言 | 你还在这样获取文件的大小吗?

在项目中,我们可能会需要获取一个文件的大小,在Golang(Go语言)中,有很多方法来获取一个文件的大小,看看你是否还在用最慢的方式。 Read字节方式 第一种,是最直观会想到的,也就是打开文件,把文件读取一遍。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 func main() { file,err:=os.Open("water") if err ==nil { sum := 0 buf:=make([]byte,2014) for { n,err:=file.Read(buf) sum+=n if err==io.EOF { break }……

阅读全文

最近文章

分类

标签

其它