用Go做极简网址导航
之前一直使用百度自带的网址导航,但是最近发现不能添加类别目录了。所以想找个差不多的导航网址,一直没有找到。 要么是各种弹广告,要么是不能自己添
之前一直使用百度自带的网址导航,但是最近发现不能添加类别目录了。所以想找个差不多的导航网址,一直没有找到。 要么是各种弹广告,要么是不能自己添
Linux新手配置 还记得我上大学那会儿,装一个Linux系统还是一件比较复杂的事请。 先要下载镜像,然后刻到光盘里面,然后再用光盘安装。 最头疼
源码 go slice 的源码位于 go/src/runtime/slice.go 下 定义 slice 的定义如下 type slice struct { array unsafe.Pointer len int cap int } 其中包括一个指向内存实际存储空间的指针 array slice 的长度 len slice 的容量 cap 扩容 主要的扩容逻辑是
panic 向已经关闭的 chan 写数据 重复关闭 chan 阻塞 为初始化的 channel 值为 nil, 向未初始化的 chan 读写数据会导致 goroutine 永久阻塞 向已满的 chan 写,从空 chan 读 0值 读取已关闭的 chan,
进程与内存 进程占用的用户空间,划分成 5个不同的内存区域 代码段 数据段 BSS 段 堆 栈 size 命令可以查看一个可执行文件各个段的大小
前言 我决定这一节作为这个系列的最后一节了, 基本上把这些学会了应该能入门了 一些更深入的游戏开发, 就要靠你自己了 这一节就把碰撞检测讲一下 代码 这一
前言 sdl2 提供了快速旋转和翻转的功能, 这一节我们就来看看如何使用 代码 代码这边我把 texture 结构体单独拎出来放到一个文件里, 代码量多了之后就要注意工程管理
前言 动画就是显示一组图片来创造一个移动的错觉 在 SDL 中就是把 texture 中的不同部分, 一帧一帧的循环显示就可以了 代码 package main import ( "github.com/veandco/go-sdl2/img" "github.com/veandco/go-sdl2/sdl" ) type Texture struct { t *sdl.Texture } func (this *Texture) LoadFromFile(path string)
前言 上一节讲了颜色调制, 这一节我们讲透明度的转换 由于透明度的变化会使得两张图片的融合, 我们还需要设置容和标志 代码 package main import ( "github.com/veandco/go-sdl2/img" "github.com/veandco/go-sdl2/sdl" ) type Texture struct { t *sdl.Texture }
前言 我们可以使用颜色调制, 来动态地改变 texture 上渲染的图片的颜色 代码 package main import ( "github.com/veandco/go-sdl2/img" "github.com/veandco/go-sdl2/sdl" ) type Texture struct { *sdl.Texture } func (t *Texture) LoadFromFile(path string) bool { img, err := img.Load(path) if err != nil { panic(err) } t.Texture, err = Grender.CreateTextureFromSurface(img) if err != nil
前言 SDL2 的教程上说这一节叫 color keying, 实在不懂这是什么意思 百度了一下说是抠图, 我实在是对应不上这两个词 通俗的解释一下吧, 就是比如你有一张图, 你想把背景
前言 SDL2 说你有时候只想渲染窗口的一部分, 那么你可以使用 viewport 好了, 没啥好说的上代码 代码 package main import ( "github.com/veandco/go-sdl2/img" "github.com/veandco/go-sdl2/sdl" ) const ( W = 670 H = 620 ) func main() { sdl.Init(sdl.INIT_EVERYTHING) defer sdl.Quit() window, _ := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, W, H,
前言 SDL2 可以在渲染器 renderer 上直接画几何图, 下面我们就来试试吧, 很简单 代码 package main import ( "github.com/veandco/go-sdl2/sdl" ) const ( W = 670 H = 620 ) func main() { sdl.Init(sdl.INIT_EVERYTHING) defer sdl.Quit() window, _ := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, W, H, sdl.WINDOW_SHOWN) defer window.Destroy() renderer, _ := sdl.CreateRenderer(window, -1,
前言 SDL2 宣称加入了新的渲染技术, 就是基于硬件加速的 texture 渲染, 我也不知道这个 texture 指的是什么, 不妨猜一猜, 应该是纹理图片吧 我们这里不纠结 SDL 的具体技术啦
前言 现在我们已经可以在窗口里展示我们的图片了 由于图片的数量不多, 所以我们感觉不到渲染的速度, 但当你真正开发一款游戏的时候, 你会发现渲染未经处
前言 我们现在已经会显示图片了, 这一节我们来讲一下事件驱动 原理 SDL 事件包括了键盘输入, 鼠标输入, 手柄, 等等 SDL 会将所有发生的事件放到一个队列中去,
前言 上一节我们创建了一个窗口, 这一节我们将在窗口上显示一张图片 显示图片 package main import ( "github.com/veandco/go-sdl2/img" "github.com/veandco/go-sdl2/sdl" ) func main() { sdl.Init(sdl.INIT_EVERYTHING) defer sdl.Quit() window, _ := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, 670, 620, sdl.WINDOW_SHOWN) defer window.Destroy() surface, _ := window.GetSurface() defer surface.Free() surface.FillRect(nil, sdl.MapRGB(surface.Format, 0x0, 0x0, 0x0))
前言 一直以来 Go 语言都是作为服务器开发的优势语言, 但我一直想用 Go 来做游戏客户端, 市面上也没有特别好的引擎, 然后就像自己玩玩 我还是选择最纯粹的 SDL
读写分离 Go 在往 chan 里写数据的时候, 是没有办法判断该 chan 是否是关闭的, 此时必须要加上一个标志位, 在发送之前判断一下 正常情况下是可行的, 但是在压测的
go 单链表的实现 package fcbase import ( "fmt" ) type LNode struct { Data interface{} next *LNode } func NewLNode() *LNode { return &LNode{} } func CreateList(head *LNode, num int) { cur := head for i := 0; i < num; i++ { cur.next = NewLNode() cur.next.Data = i cur = cur.next } } func PrintList(head *LNode) { for cur := head.next; cur != nil; cur
最近重读 go语言圣经, 看到6.5节用 bit 数组来实现 set 这样的好处是一个 64 位的 word 值就能存 64 个值, 有效利用内存 但是也想到一些问题 文中的插入的实现是这
1. 线程的主要成本 时间成本 线程切换的开销,主要是寄存器的保存与恢复 线程的调度 线程之间的同步与互斥 空间成本 线程执行状态 线程局部存储 线程的堆栈 这里
方法1 func del(data []int, d int) []int { i := 0 for _, v := range data { if v != d { data[i] = v i++ } } return data[:i] } 方法2 func del2(data []int, d int) []int { for i := 0; i < len(data); i++ { if data[i] == d { data = append(data[0:i], data[i+1:len(data)]...) i-- } } return data }
升级Go到1.13 设置各类环境变量 export PATH=$PATH:~/go/bin export GOROOT=~/go export GOPATH=~/gopkg export GO111MODULE=on export GOBIN=~/gobin export GOCACHE=~/gocache export GOPROXY=https://goproxy.cn,direct 新建目录fancygo(根据项目需要自行修改目录名字) mkdir fancygo cd fancygo 创建 main.go 并写入代码