Go 语言简单实现HashSet

公司有个需求,就是能够对列表去重。本屌原本想直接用for循环实现,后来去查了查Java的实现方式,大开眼界。 Set,是指数学里的集合。集合当中不能有重复的元素。判断是否有重复,可以使用哈希的方法。Java容器当中有基于哈希实现的HashSet。把元素都放入HashSet当中,如果有重复,则会插入失败。这样就能判断出来是否重复了。 而Golang并没有这种高级的容器。只是找了一个大神实现的,稍微改了一下,能够支持字符串检测。 http://play.golang.org/p/_FvECoFvhq...阅读全文

阅读:6613 评论:0

too many open files错误

大家都知道,最近我模仿binux大婶的pyspider的害羞组在线上跑了一段时间了。后来加入了一些新的东西,比如代理池等。看瞅着代码越来越靠谱了,结果突然有一天,发现抓取停止了,紧接着去看日志: 2015/08/12 23:18:22 Post http://api.duoshuo.com/posts/import.json: dial tcp: lookup api.duoshuo.com: too many open files 作为一个菜鸟,我哪知道这是啥啊。后来用Google去搜,发现这...阅读全文

阅读:3198 评论:0

cgo

golang与C有着千丝万缕的联系,go代码中可以调用C代码 由于项目需要,新使用的golang语言需要调用C语言写的加解密函数,所以用到了cgo,在此记录一点使用心得 如何调C代码 非常简单,只需要两步 在golang代码开始部分(package xxx之后),添加注释,注释中编写需要使用的C语言代码 紧挨着注释结束,另起一行增加import "C",注意跟注释中的C代码紧挨,不要有空行,且不要跟其他golang的import放在一起 这样在golang语言的正文中就可以用C.xxx的方式调用...阅读全文

2017.10.23 16:17 风千寻艾
阅读:4346 评论:1

Go 原子操作

> > 本文讲解 golang 中 sync.atomic 的常见操作 atomic 提供的原子操作能够确保任一时刻只有一个goroutine对变量进行操作,善用 atomic 能够避免程序中出现大量的锁操作。 atomic常见操作有: * 增减 * 载入 * 比较并交换 * 交换 * 存储 下面将分别介绍这些操作。 ---- 增减操作 ---- atomic 包中提供了如下以Add为前缀的增减操作: - func AddInt32(addr *int32, delta int3...阅读全文

阅读:3257 评论:1

go语言中int和byte转换

主机字节序 主机字节序模式有两种,大端数据模式和小端数据模式,在网络编程中应注意这两者的区别,以保证数据处理的正确性;例如网络的数据是以大端数据模式进行交互,而我们的主机大多数以小端模式处理,如果不转换,数据会混乱 参考;一般来说,两个主机在网络通信需要经过如下转换过程:主机字节序 —> 网络字节序 -> 主机字节序 大端小端区别 大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端 低地址 --------------------> 高地址 高位字节 地...阅读全文

2018-11-11 12:34:39 wuzhc
阅读:29763 评论:1

Golang爬虫全攻略

本文地址:https://www.jianshu.com/p/4e53d4727152 一、简介 Golang诞生已经超过十个年头了,发展得愈发完善,其简单方便的协程并发机制使得其在爬虫领域有着一定的天赋。 首先我们来看一看,Golang相对于Python这个爬虫领域的传统强者,有哪些优点和缺点。 优点: 完善简便的协程并发机制 并发数量大 占用资源少 运行速度更快 部署方便 缺点: 数据处理比较繁琐 成熟工具不是很多 资料较少 实现相同逻辑需要的代码更多 由于Golang本身静态语言的特性,和...阅读全文

2019.05.20 15:46* 王南北丶
阅读:25734 评论:1

Go defer 会有性能损耗,尽量不要用?

原文地址:Go defer 会有性能损耗,尽量不要用? 上个月在 @polaris @轩脉刃 的全栈技术群里看到一个小伙伴问 “说 defer 在栈退出时执行,会有性能损耗,尽量不要用,这个怎么解?”。 恰好前段时间写了一篇 《深入理解 Go defer》 去详细剖析 defer 关键字。那么这一次简单结合前文对这个问题进行探讨一波,希望对你有所帮助,但在此之前希望你花几分钟,自己思考一下答案,再继续往下看。 测试 func DoDefer(key, value string) { defer ...阅读全文

2019-09-07 18:56:30 煎鱼
阅读:1714 评论:0

Go调用浏览访问url链接

1.背景 开发程序的时候,需要打开浏览器,省去用户自己手动打开的麻烦,在golang中有方式可以直接代开, start, xdg-open 分别是windows和mac, linux打开系统默认程序的工具,所以你要使用谷歌打开就必须要把谷歌浏览器设置为默认,linux下不要使用root权限使用xdg-open,windows下失败可以尝试在管理员权限下的cmd执行你的程序, windows 执行命令 cmd /C start htttp://tech.mojotv.cn linux/freebs...阅读全文

2019-09-05 09:32:36 TechMojotv
阅读:4877 评论:0

Go 每日一库之 viper

简介 上一篇文章介绍 cobra 的时候提到了 viper,今天我们就来介绍一下这个库。viper 是一个配置解决方案,拥有丰富的特性: 支持 JSON/TOML/YAML/HCL/envfile/Java properties 等多种格式的配置文件; 可以设置监听配置文件的修改,修改时自动加载新的配置; 从环境变量、命令行选项和io.Reader中读取配置; 从远程配置系统中读取和监听修改,如 etcd/Consul; 代码逻辑中显示设置键值。 快速使用 安装: $ go get github...阅读全文

阅读:16487 评论:1

golang for-select 优雅的退出

启动两个做为生产者的go-routing, 分别将数据生产的数据写入两个带缓冲的通道cha1,ch2 分别模拟在Main go-routing和 sub go-routing中通过for-select循环读取两个通道的值并打印 通过3种方式优雅的退出main go-routing exit for-select in go-routing https://play.golang.org/p/Ar4389-87QE package main import ( // "time" "fmt" ) f...阅读全文

2020-05-21 19:32:47 夜空一起砍猩猩
阅读:8502 评论:2