go
文章平均质量分 86
erlang_hell
这个作者很懒,什么都没留下…
展开
-
2021-11-05-golang内存分配
这里写自定义目录标题简介大事件基础数据结构、概念STW(Stop The Word)流程golang源码注释mgc说明mstats说明内存分配分配大概流程内存块三色标记和写屏障控制器 gcControoler测试数据如何阅读heap信息概要统计信息堆统计信息简介信息细则栈信息细则非堆栈内存信息细则引用简介最近被golang的内存问题困扰,这里做一下功课,将通过收集资料,记录笔记的方式将golang的内存分配相关知识搞清楚。资料来自于阅读《go语言学习笔记》,源码,网上的资料。大事件2014/06原创 2021-11-07 21:38:39 · 907 阅读 · 0 评论 -
go-etcd阅读笔记
简介etcd是CoreOS团队于2013年6月发起的开源项目,是一个分布式、可靠 key-value 存储的分布式系统。当然,它不仅仅用于存储,还提供共享配置及服务发现。向etcd 注册 该服务(其实就是 存一个值)然后向etcd 发送心跳,当etcd 没有检测到心跳就会 把这个键值对 删了(这整个动作是etcd里的租约模式),网关那边 就只需要 watch 这个 key ,就能够知道 所有服务的所有动态了etcd现在用于制作服务发现是比较常见的。用一篇文章记录一下如何安装、配置、使用。以及介绍一些e原创 2021-09-27 10:09:13 · 276 阅读 · 0 评论 -
go语言并发之道-笔记
借过同事的一本《go语言并发之道》一直都没有去阅读。我是非常懒惰的,开一篇笔记,督促自己将本书阅读完成。主要是抓举一些概念,然后就是理解如何组织代码。O’Reily 奥莱利 出版社。0. 前言1. 并发概述1.1. 并发的重要性1.2. 并发难点1.2.1. 竞争条件1.2.2. 原子性1.2.3. 内存访问同步1.2.4. 死锁、活锁和饥饿1. 死锁(deadlock)2. 活锁(livelock)3. 饥饿(hunger)1.2.5.2.对你的代码建模:通原创 2021-01-13 11:45:15 · 515 阅读 · 0 评论 -
cgo的使用
golang可以通过cgo直接来调用c/c++的函数代码。这里是参考《Go语言高级编程》书,做一些笔记。结构按照书的章节来。1.快速入手2.CGO基础2.1.操作系统区分3.类型转换4.函数调用6.实例10.编译/链接参数参考1.快速入手// hello.gopackage mainimport "C"func main() { println("hello cgo")}2.CGO基础需要安装C/C++构建工具链,在macOS和Linux下是要安装GC原创 2021-01-05 08:19:02 · 657 阅读 · 1 评论 -
golang-pprof性能分析工具
记录一下pprof查询golang性能相关;1.在代码里面添加性能监控的代码import ( "net/http" _ "net/http/pprof")go func() { http.ListenAndServe(":10003", nil)}()2.需要安装环境go get -u github.com/google/pprof2.1.开篇编写好了golang服务之后,接着要开始关注服务的CPU,内存使用情况。golang提供了性能剖析工具,记录一些自己搜集到的信原创 2020-12-30 13:53:36 · 574 阅读 · 3 评论 -
go[2]-数据结构
参考golang手册,记录数据类型相关资料;方便日后来回顾基础知识。1. 基本数据1.1. 布尔布尔类型,表示真与假。true|false1.2. 整型/浮点数数值类型,分为整形和浮点类型,下面列举的是类型,以及读数的区间。uint8 the set of all unsigned 8-bit integers (0 to 255)uint16 the set of all unsigned 16-bit integers (0 to 65535)uint32原创 2020-11-21 10:34:37 · 360 阅读 · 0 评论 -
FSM-Golang
这里写自定义目录标题概念游戏中常用的状态机阅读 looplab/fsm 实现参考使用FSM(Finite State Machine)来制作怪物的AI,比较轻量级;概念状态机分为两大类:名称说明Moore machine输出只和状态有关而与输入无关Mealy machine输出不仅和状态有关而且和输入有关系(使用这种状态机通常可以减少状态的数量。)状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件原创 2020-11-19 17:36:08 · 758 阅读 · 0 评论 -
golang http post 实验
在制作游戏服务器的时候,登录验证操作的时候,需要发起post请求给web服务器,来完成对于登录的校验。这篇文章记录一下使用golang常用的一些操作,方便今后需要的时候查阅。对于关于如何打包post,查看考了stackoverflow1。用json方式 post讲数据打包成jsonfunc (this *User) calcJson(cfg *Cfg) *bytes.Buffer { kvPairs := make(map[string]string) kvPairs["packageId"]原创 2020-05-28 17:21:52 · 452 阅读 · 0 评论 -
游戏中编号的分配
文章目录概述方案1方案2方案3方案4参考概述游戏中的编号包含玩家编号,英雄编号,物品编号等等。也是制作游戏的基础。编写这篇文章,来分析一下游戏中这些编号是如何生成的。方案1在启动服务器之后将时间戳记录下来,再加上一点点随机数参杂在其中。每次获取的时候使用一个极大的质数做乘法,取低位;方案2为每个区服分配一个固定区间的编号,并且保存当前的使用情况;这样是严格按照id不重复来制作;方案3...原创 2020-02-16 09:59:06 · 1743 阅读 · 1 评论 -
go-mod
文章目录概述如何开启go mod命令实例go mod tidy我无法使用goalng.org/x的包我该怎么办参考链接概述本文是阅读了别人的文档之后,做的笔记。go modules 是 golang 1.11 新加的特性。当modules 功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的 module。特性和no...转载 2020-02-12 17:22:47 · 443 阅读 · 2 评论 -
go[3]-流程控制-函数
函数是对一系列语句打包的单元。函数定义func name(parameter-list)(result-list) {body}能支持多返回值,或者无返回值。匿名函数是指的没有名字的函数。函数可以成为一个结构体字段,也能成为通道来传递。匿名函数是一种常见的重构手段。可以将大函数分解成多个相对独立的匿名函数块,这样主干部分的调用函数将会更加简洁,做到框架和细节分离。匿名函数...原创 2020-01-04 18:43:27 · 123 阅读 · 0 评论 -
go[4]-接口
概述接口是对类型行为的抽象和概括。接口抽象的方法可以让我们函数更加灵活和适应性。中间只定义了函数类型。接口就是约定。接口本事存储数据内容为:type: xxxvalue: xxx定义实例type interfaceName interface { Write([]byte) Read([]byte)}包含nil指针的接口不是nil接口fu...原创 2020-01-05 17:27:58 · 117 阅读 · 0 评论 -
go[5]-Goroutines Channels
概念go语言中的并发程序通过两种手段来实现。goroutine和channel。顺序通讯进程(communicating sequential processes)简称CSP.并发(concurrency):逻辑上具备同时处理多个任务的能力。并行(parallelism):物理上再统一时刻执行多个并发任务。goroutine简单将goroutine归纳为协程不合适。运行时会创建多个...原创 2020-01-05 18:17:23 · 109 阅读 · 0 评论 -
go[6]-包结构
标准目录为src、bin、pkg三个目录。GOPATH可以指定几个目录,排在列表最前面的比当前工作空间优先级更高。go get默认会下载到第一个工作空间里面。备注:unix-like使用冒号分隔,windows使用;分割。GOROOT指定工具链和标准库的存放位置。导入包如果是系统级的包的导入import "net/http"import osx "github.com/appl...原创 2020-01-06 23:59:57 · 328 阅读 · 0 评论 -
go[7]-反射
反射(reflect)功能是让我们能在运行期间获取对象的类型。Type和Kind可以定义类型的别名,类型是真实比对真实的基本类型。下面有一个例子代码可以看出二者的差别。package mainimport ( "fmt" "reflect")type X int // 取了一个别名type Y intfunc main() { var a, b...原创 2020-01-07 08:56:23 · 101 阅读 · 0 评论 -
go[8]-测试
提高代码的质量,有两个路数:1.多测试;2.做代码review;如果能在代码放到外部去之前,做好单元测试,将会节省很多的时间(如果能把事情做好,减少很多处理bug的时间)。单元测试(unit test)单元测试能自动化,只是手段,而非目的。避免形式主义。需要持之以恒。想要习惯去做测试还是需要将测试的手段非常熟练,而且易用才能解开。编写单元测试是对即将实现的算法做复核预演。测试代码需要在...原创 2020-01-07 23:29:42 · 334 阅读 · 0 评论 -
go-tcpsvr
go语言用于制作socket相关的事情是非常方便的。在底层框架直接有支持。在这里编写一个简单版本的服务器通讯逻辑。参考了leaf的代码。package mainimport ( "encoding/binary" "fmt" "io" "net" "os" "os/signal" "sync" "time")type ...原创 2020-01-09 16:42:52 · 181 阅读 · 0 评论 -
go-micro入门[翻译]
官方主页Go Micro is a framework for microservice development.GoMicro是一个微服框架。Overview 概述Go Micro provides the core requirements for distributed systems development including RPC and Event driven com...原创 2020-01-11 12:15:56 · 189 阅读 · 0 评论 -
go-etcd入门资料
参考网站官方网站参考文档1微服介绍A distributed, reliable key-value store for the most critical data of a distributed system.为分布式系统重要数据提供分布式,可靠的key-value存储。feature 特性simple interface 简化的接口Read and write val...原创 2020-01-12 07:51:26 · 218 阅读 · 0 评论 -
gopher-lua初步了解
最近看到golang里面有人实现了一套lua的调用库。go-luahttps://github.com/yuin/gopher-luagithub.com/aarzilli/golua/lua性能对比This exercises the call stack implementation. When computing fib(35), go-lua is about 6x slower ...原创 2020-01-13 21:50:41 · 2360 阅读 · 0 评论 -
golang-gin入门资料
下载地址官网文档一个实例Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourse...原创 2020-01-14 23:16:33 · 210 阅读 · 0 评论 -
go-工具链
linux环境搭建先解压缩golang的包tar -xf ./go.1.xxx.tar.gz -C /usr/local使用go env查询具体的环境信息。通过编辑~/.bashrc文件的环境变量来修改配置。go build参数 说明 示例 -o 可执行文件名 -a 强制重编译所有包()包含标准库 -p 并行编译...原创 2020-01-15 22:52:08 · 518 阅读 · 0 评论 -
go-源码阅读-准备
golang语言写起来很方便,但是如果想把代码写的更好,例如规避gc潜在的问题,节约内存,提升运行性能,都需要对虚拟机做一些了解。这一系列的文章是我再阅读雨痕的《GO语言学习笔记》,记录一些信息。环境go 1.5.1 amd64 ubuntu14.04.3 LTS gdb 7.7.1引导程序启动不是使用main.main函数,之前有命令行处理,运行时初始化工作之后,才会进入用户逻辑...原创 2020-01-17 21:07:15 · 175 阅读 · 0 评论 -
go-读取输入参数
前言编写程序的时候,需要读取用户输入的参数来做一些事情。在golang里面有两个库可以来制作这块的功能。flagflag包,加载输入信息。官方两个例子:// Example 1: A single string flag called "species" with default value "gopher".var species = flag.String("species...原创 2020-01-31 09:18:19 · 860 阅读 · 0 评论 -
go-mysql
记录一下使用mysql来处理db相关操作。连接dbpackage mainimport ( "database/sql" "github.com/go-sql-driver/mysql" "github.com/sirupsen/logrus")func connMysql() bool { cfg := &mysql.Config{}...原创 2020-02-04 22:08:43 · 234 阅读 · 0 评论 -
go-pprof笔记
开篇编写好了golang服务之后,接着要开始关注服务的CPU,内存使用情况。golang提供了性能剖析工具,记录一些自己搜集到的信息,写下一些实践的情况。在golang中内置了pprof工具,专门来做golang语言的优化。PProf 关注的模块CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据 Memory Profile...原创 2020-02-08 16:59:00 · 314 阅读 · 0 评论