一起用Go做一个小游戏(下)

2022-12-07
阅读 4 分钟
4k
使用file2byteslice包我们可以将图片和config.json文件打包进二进制程序中,之后编译生成一个二进制程序。然后拷贝这一个文件即可,不用再拷贝图片和其他配置文件了。

一起用Go做一个小游戏(中)

2022-12-06
阅读 13 分钟
3.9k
上一篇文章还留了个尾巴,细心的同学应该发现了:飞船可以移动出屏幕!!!现在我们就来限制一下飞船的移动范围。我们规定飞船可以左右超过半个身位,如下图所示:

一起用Go做一个小游戏(上)

2022-12-06
阅读 10 分钟
4.7k
引子最近偶然看到一个Go语言库,口号喊出“一个超级简单(dead simple)的2D游戏引擎”,好奇点开了它的官网。官网上已经有很多可以在线体验的小游戏了(利用WASM技术)。例如曾经风靡一时的2048:当然只要安装了Go,我们也键入下面的命令本地运行这个游戏: {代码...} 还有童年《俄罗斯方块》:有14年左右让无数人疯狂的...

Go中调用外部命令的几种姿势

2022-11-08
阅读 9 分钟
1.7k
在工作中,我时不时地会需要在Go中调用外部命令。前段时间我做了一个工具,在钉钉群中添加了一个机器人,@这个机器人可以让它执行一些写好的脚本程序完成指定的任务。机器人倒是不难,照着钉钉开发者文档添加好机器人,然后@这个机器人就会向一个你指定的服务器发送一个POST请求,请求中会附带文本消息。所以我要做的就...

Go 每日一库之 roaring

2022-07-18
阅读 10 分钟
2.3k
集合是软件中的基本抽象。实现集合的方法有很多,例如 hash set、tree等。要实现一个整数集合,位图(bitmap,也称为 bitset 位集合,bitvector 位向量)是个不错的方法。使用 n 个位(bit),我们可以表示整数范围[0, n)。如果整数 i 在集合中,第 i 位设置为 1。这样集合的交集(intersection)、并集(unions)和差集...

Go 每日一库之 bitset

2022-07-16
阅读 8 分钟
2.7k
我们都知道计算机是基于二进制的,位运算是计算机的基础运算。位运算的优势很明显,CPU 指令原生支持、速度快。基于位运算的位集合在有限的场景中替换集合数据结构可以收到意想不到的效果。bitset库实现了位集合及相关操作,不妨拿来即用。

Go 每日一库之 testify

2021-08-12
阅读 11 分钟
10.7k
testify可以说是最流行的(从 GitHub star 数来看)Go 语言测试库了。testify提供了很多方便的函数帮助我们做assert和错误信息输出。使用标准库testing,我们需要自己编写各种条件判断,根据判断结果决定输出对应的信息。

Go 每日一库之 testing

2021-08-04
阅读 14 分钟
5.2k
testing是 Go 语言标准库自带的测试库。在 Go 语言中编写测试很简单,只需要遵循 Go 测试的几个约定,与编写正常的 Go 代码没有什么区别。Go 语言中有 3 种类型的测试:单元测试,性能测试,示例测试。下面依次来介绍。

Go 每日一库之 goth

2021-07-26
阅读 5 分钟
3.5k
简介当前很多网站直接采用第三方认证登录,例如支付宝/微信/ Github 等。goth封装了接入第三方认证的方法,并且内置实现了很多第三方认证的实现:图中截取的只是goth支持的一部分,完整列表可在其GitHub 首页查看。快速使用本文代码使用 Go Modules。创建目录并初始化: {代码...} 安装goth库: {代码...} 我们设计了两...

Go 每日一库之 gorilla/sessions

2021-07-26
阅读 9 分钟
7.2k
上一篇文章《Go 每日一库之 securecookie》中,我们介绍了 cookie。同时提到 cookie 有两个缺点,一是数据不宜过大,二是安全问题。session 是服务器端的存储方案,可以存储大量的数据,而且不需要向客户端传输,从而解决了这两个问题。但是 session 需要一个能唯一标识用户的 ID,这个 ID 一般存放在 cookie 中发送到客...

Go 每日一库之 gorilla/securecookie

2021-07-23
阅读 8 分钟
5.2k
cookie 是用于在 Web 客户端(一般是浏览器)和服务器之间传输少量数据的一种机制。由服务器生成,发送到客户端保存,客户端后续的每次请求都会将 cookie 带上。cookie 现在已经被多多少少地滥用了。很多公司使用 cookie 来收集用户信息、投放广告等。

Go 每日一库之 gorilla/schema

2021-07-23
阅读 4 分钟
5.5k
gorilla/schema 是 gorilla 开发工具包中用于处理表单的库。它提供了一个简单的方式,可以很方便地将表单数据转为结构体对象,或者将结构体对象转为表单数据。

Go 每日一库之 gorilla/handlers

2021-07-22
阅读 12 分钟
4.1k
上一篇文章中,我们介绍了 gorilla web 开发工具包中的路由管理库gorilla/mux,在文章最后我们介绍了如何使用中间件处理通用的逻辑。在日常 Go Web 开发中,开发者遇到了很多相同的中间件需求,gorilla/handlers(后文简称为handlers)收集了一些比较常用的中间件。一起来看看吧~

Go 每日一库之 gorilla/mux

2021-07-20
阅读 11 分钟
7.7k
gorilla/mux是 gorilla Web 开发工具包中的路由管理库。gorilla Web 开发包是 Go 语言中辅助开发 Web 服务器的工具包。它包括 Web 服务器开发的各个方面,有表单数据处理包gorilla/schema,有 websocket 通信包gorilla/websocket,有各种中间件的包gorilla/handlers,有 session 管理包gorilla/sessions,有安全的 cooki...

Go 每日一库之 net/http(基础和中间件)

2021-07-14
阅读 11 分钟
6.5k
几乎所有的编程语言都以Hello World作为入门程序的示例,其中有一部分以编写一个 Web 服务器作为实战案例的开始。每种编程语言都有很多用于编写 Web 服务器的库,或以标准库,或通过第三方库的方式提供。Go 语言也不例外。本文及后续的文章就去探索 Go 语言中的各个Web 编程框架,它们的基本使用,阅读它们的源码,比较...

Go 每日一库之 colly

2021-07-02
阅读 11 分钟
10k
colly是用 Go 语言编写的功能强大的爬虫框架。它提供简洁的 API,拥有强劲的性能,可以自动处理 cookie&session,还有提供灵活的扩展机制。

Go 每日一库之 resty

2021-06-27
阅读 12 分钟
19k
resty是 Go 语言的一个 HTTP client 库。resty功能强大,特性丰富。它支持几乎所有的 HTTP 方法(GET/POST/PUT/DELETE/OPTION/HEAD/PATCH等),并提供了简单易用的 API。

Go 每日一库之 dateparse

2021-06-25
阅读 6 分钟
5.5k
不管什么时候,处理时间总是让人头疼的一件事情。因为时间格式太多样化了,再加上时区,夏令时,闰秒这些细枝末节处理起来更是困难。所以在程序中,涉及时间的处理我们一般借助于标准库或第三方提供的时间库。今天要介绍的dateparse专注于一个很小的时间处理领域——解析日期时间格式的字符串。

Go 每日一库之 ozzo-validation

2021-06-22
阅读 11 分钟
6.9k
ozzo-validation是一个非常强大的,灵活的数据校验库。与其他基于 struct tag 的数据校验库不同,ozzo-validation认为 struct tag 在使用过程中比较容易出错。因为 struct tag 本质上就是字符串,完全基于字符串的解析,无法利用语言的静态检查机制,很容易在不知不觉中写错而不易察觉,实际代码中出现错误也很难排查。

用 Go 实现一个 GitHub Trending API

2021-06-17
阅读 8 分钟
3.4k
上一篇文章Go 每日一库之 bubbletea我们介绍了炫酷的 TUI 程序框架 — bubbletea。最后实现了一个拉取 GitHub Trending 仓库,并显示在控制台的程序。由于 GitHub 没有提供官方的 Trending API,我们用goquery自己实现了一个。上篇文章由于篇幅关系zh,没有介绍如何实现。本文我整理了一下代码,并以单独的代码库形式开放...

Go 每日一库之 bubbletea

2021-06-16
阅读 9 分钟
4.9k
bubbletea是一个简单、小巧、可以非常方便地用来编写 TUI(terminal User Interface,控制台界面程序)程序的框架。内置简单的事件处理机制,可以对外部事件做出响应,如键盘按键。一起来看下吧。先看看bubbletea能做出什么效果:

为 tunny 提交的一次 PR

2021-06-14
阅读 2 分钟
2.8k
上周我写了一篇文章Go 每日一库之 ants,深入剖析了ants这个 goroutine 池的实现。在反复阅读了多遍panjf2000关于ants的起源的文章——GMP 并发调度器深度解析之手撸一个高性能 goroutine pool,我感觉收获满满。这篇文章对于理解 Go 的 goroutine 并发机制有很大的参考价值,强烈建议一读。然后我花了几个小时时间详细阅...

Go 每日一库之 tunny

2021-06-10
阅读 11 分钟
6.3k
之前写过一篇文章介绍了ants这个 goroutine 池实现。当时在网上查看相关资料的时候,发现了另外一个实现tunny。趁着时间相近,正好研究一番。也好比较一下这两个库。那就让我们开始吧。

Go 每日一库之 ants(源码赏析)

2021-06-08
阅读 16 分钟
5.7k
p, _ := ants.NewPool(cap):这种方式创建的池子对象需要调用p.Submit(task)提交任务,任务是一个无参数无返回值的函数;

Go 每日一库之 ants

2021-06-04
阅读 10 分钟
11.7k
处理大量并发是 Go 语言的一大优势。语言内置了方便的并发语法,可以非常方便的创建很多个轻量级的 goroutine 并发处理任务。相比于创建多个线程,goroutine 更轻量、资源占用更少、切换速度更快、无线程上下文切换开销更少。但是受限于资源总量,系统中能够创建的 goroutine 数量也是受限的。默认每个 goroutine 占用 8...

Go 每日一库之 reflect

2021-06-01
阅读 17 分钟
4.3k
反射是一种机制,在编译时不知道具体类型的情况下,可以透视结构的组成、更新值。使用反射,可以让我们编写出能统一处理所有类型的代码。甚至是编写这部分代码时还不存在的类型。一个具体的例子就是fmt.Println()方法,可以打印出我们自定义的结构类型。

Go 每日一库之 fasttemplate

2021-05-25
阅读 10 分钟
5.3k
fasttemplate是一个比较简单、易用的小型模板库。fasttemplate的作者valyala另外还开源了不少优秀的库,如大名鼎鼎的fasthttp,前面介绍的bytebufferpool,还有一个重量级的模板库quicktemplate。quicktemplate比标准库中的text/template和html/template要灵活和易用很多,后面会专门介绍它。今天要介绍的fasttemlate只...

Go 每日一库之 gotalk

2021-05-21
阅读 7 分钟
2.9k
简介gotalk专注于进程间的通信,致力于简化通信协议和流程。同时它:提供简洁、清晰的 API;支持 TCP,WebSocket 等协议;采用非常简单而又高效的传输协议格式,便于抓包调试;内置了 JavaScript 文件gotalk.js,方便开发基于 Web 网页的客户端程序;内含丰富的示例可供学习参考。那么,让我们来玩一下吧~快速使用本文代...

Go 每日一库之 bytebufferpool

2021-05-09
阅读 5 分钟
7.3k
在编程开发中,我们经常会需要频繁创建和销毁同类对象的情形。这样的操作很可能会对性能造成影响。这时,常用的优化手段就是使用对象池(object pool)。需要创建对象时,我们先从对象池中查找。如果有空闲对象,则从池中移除这个对象并将其返回给调用者使用。只有在池中无空闲对象时,才会真正创建一个新对象。另一方面...

Go 每日一库之 rxgo

2020-10-15
阅读 14 分钟
5.9k
ReactiveX,简称为 Rx,是一个异步编程的 API。与 callback(回调)、promise(JS 提供这种方式)和 deferred(Python 的 twisted 网络编程库就是使用这种方式)这些异步编程方式有所不同,Rx 是基于事件流的。这里的事件可以是系统中产生或变化的任何东西,在代码中我们一般用对象表示。在 Rx 中,事件流被称为 Observa...