
go
lucky404
hello world
展开
-
golang 常用数据类型以及占用内存大小
要搞清楚这个问题先要了解几个常用的存储单位的转换1.bit(位): 二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。二进制的一个“0”或一个“1”叫一位2.Byte(字节): 计算机中数据的基本单位,每8位组成一个字节int8: 8位,就是一个字节int16: 2个字节int32: 4个字节int64:8个字节float32: 4个字节float64: 8 个字节...原创 2019-12-26 16:14:19 · 10334 阅读 · 0 评论 -
golang gin + websocket 实现商城客服聊天功能
最近使用 gin 在重构一个商城项目,需要加客服聊天的功能,因此我使用了websocket来实现了,websocket 框架的选择,当然是 github.com/gorilla/websocket1.实现的思路由于之前写python的时候接触过websocket,但是当时是使用类似于广播的机制的,没有做过一对一的聊天.但是既然知道了广播,那一对一也就不是什么难事了首先客户端连接上来时,服务器...原创 2019-12-10 15:14:40 · 4159 阅读 · 3 评论 -
go检查ip地址格式是否正确
2019 年 1 月 3 日 春节放假 第二天,终于有比较清闲的时间了,今天来更新一下博客关于使用go 如何 检查ip 地址是否是正确的格式的,比如 15.69.00.5 还有 10.23.76.256 这些显然不是一个正确的 ipv4的地址格式,一般来说检查 ip 地址 email 之类的 格式是否合法的大家都会想到使用 正则表达式,其实关于检查 ip 地址格式的go的net 包已经提供了一...原创 2019-02-03 17:22:46 · 8240 阅读 · 0 评论 -
go protobuff的使用
protobuff 是谷歌的一个广泛用于前后端通信的序列化数据格式,在平时的开发过程中前后端用于数据交互的常用数据格式就是 json 和 xml, protobuff比 xml 和 json 数据都要快因此 protobuff 在游戏行业当中使用的比较多。使用protobuff的步骤1 安装 protoc 编译器, 安装go 语言protobuff 包2 定义 .proto文件3 编译成对...原创 2019-02-27 11:17:41 · 1510 阅读 · 0 评论 -
go 使用sort对数组排序
抓住4月的尾巴更新一篇博客关于golang对slice的排序,golang对数组的排序没有像python那么方便,python直接使用listObj.sort()就可以完成对数组元素的排序,golang里面需要使用sort包,并且实现几个接口Len, Swap, Lesssort 包排序demo假如现在有个slice 叫做 ids 里面保存的数据类型是int32import "sort"...原创 2019-04-30 23:28:21 · 8426 阅读 · 0 评论 -
golang 实现单链表
package mainimport "fmt"/* 使用golang实现单链表 add 操作:在链表首部添加 append 操作:在链表尾部添加,从头部找到最后一个元素,把最后一个元素指针指向需要添加的元素 insert 操作:在指定位置添加,往中间插入元素,需要调整插入该位置的元素之前的指针,还有该元素的指针需要指向下一位 delete 操作:删除指定的元素,删除任意位置的...原创 2019-05-31 15:01:26 · 1403 阅读 · 1 评论 -
golang实现栈,队列
栈(LIFO)package mainimport ( "fmt" "sync")/* 使用 golang 实现栈 栈是一种LIFO(Last In First Out) 的数据结构,可以封装一个slice实现 */type Stack struct { s []int Mutex sync.Mutex}func (self *Stack) Push(value...原创 2019-06-02 14:02:02 · 845 阅读 · 0 评论 -
golang实现双链表
双链表的定义一个节点包含数据区,还有一个指针指向前一个节点,一个指针指向后一个节点因此实现双链表需要定义这样的一个数据结构数据结构的定义import "fmt"type Node struct { Data int Prev *Node Next *Node}实现链表功能的封装type DeLinkList struct { head *Node # 由于链表任何操作都...原创 2019-06-03 14:06:50 · 691 阅读 · 0 评论 -
golang 实现二叉树遍历
前序遍历 前序遍历的顺序是 根 -----> 左子树 -----> 右子树中序遍历中序遍历的顺序是 左子树 -----> 根 ------> 右子树后序遍历后序遍历的顺序是 左子树 -----> 右子树 -----> 根package mainimport "fmt"// 二叉树的数据结构type TreeNode struct {...原创 2019-06-16 23:26:48 · 2294 阅读 · 0 评论 -
golang 快排
package mainimport "fmt"/* 快速排序 快速排序 复杂度 N * (logN) 原理为有两个指针:low, high 分别指向列表的第一个元素,和列表最后一个元素,和一个中间值 mid(就是取列表的第一个元素) 一开始 low 默认情况下就指向了mid, high 指向列表最后一个元素 [8, 3, 15, 7, 6, 2] ...原创 2019-06-21 13:49:28 · 991 阅读 · 0 评论 -
golang redigo 订阅发布的使用
redis 订阅发布功能可以做到类似生产者消费者的功能,是进程间通讯的一种手段以下记录一下使用golang redis 的包 redigo 实现redis 订阅发布功能代码如下:package mainimport ( "fmt" "github.com/gomodule/redigo/redis" "sync")func NewRedisClient() (conn red...原创 2019-10-03 20:18:01 · 884 阅读 · 0 评论 -
golang 操作 Elasticsearch
这里Elasticsearch的数据直接使用了一个开源库 amazonriver (https://github.com/hellobike/amazonriver)将postgresql 数据库中的数据同步了过来使用了golang的elastic(https://github.com/olivere/elastic)库来操作esdemo 如下:package mainimport (...原创 2019-10-06 14:30:29 · 1483 阅读 · 0 评论 -
go 设置channel 超时
go的channel 默认的情况下,如果写入了数据没有被读取走,或者读取一个空的channel就会导致阻塞的情况如果逻辑有问题,比如channel 一直没有写入数据,而有一段代码又在读取channel,则会触发deadlock panic我们可以使用 time模块的After 函数来实现,等待多少时间内,channel 没有数据,就超时,程序继续往下执行使用time.After 实现ch...原创 2019-01-24 16:59:33 · 4133 阅读 · 0 评论 -
go按行读写文件
2019年第一篇博客兜兜转转又回来更新go的博客了,今天来讲一下如何使用golang进行文件的读写文件读写需要使用的包osioutilbufiostrings文件读写总是少不了判断文件是否存在!go里面使用os.Stat 和 os.IsNotExist 相结合来判断文件是否存在os.Stat 是用来获取文件的相关信息的,比如文件大小,最近一次修改时间等,但是假如文件不存在就返...原创 2019-01-11 15:20:13 · 5945 阅读 · 4 评论 -
golang安装以及helloworld
一直想学golang,但是时间因为时间都花在看python源码上了,清明假期回来有点时间,学习一下golang 千里之行始于足下,就从如何安装golang开始吧!以下安装步骤基于Linux 系统 下载golang下载golang 我是从golang中国社区下载的: https://www.golangtc.com/download, 下载的版本是 go1.9.1.linu...原创 2018-04-04 21:26:06 · 1311 阅读 · 0 评论 -
GO学习笔记(GO数据类型)
go 学习第二天,今天主要学习了GO的一些数据类型的知识。go 常用数据类型大致有以下的类型1 int (int, int8, int16, int32, int64)2 float (float32, float64)3 string4 byte5 bool6 array7 slice8 map9 channel...原创 2018-04-05 21:48:41 · 221 阅读 · 0 评论 -
GO学习笔记(结构体)
go 可以像c 语言一样使用struct 定义结构体 go 结构体定义和使用type cat struct { // 结构体内容 name string age int color string}方式一通过 对象.属性 来赋值var c person c.name = “楼楼” c.age = 12 c.color =...原创 2018-04-18 22:11:42 · 197 阅读 · 0 评论 -
GO 面向对象
在 go 里面的面向对象没有class 的说法, go 还是使用func 和 结构体来实现面向对象编程, 并且可以实现继承和重写例如 我定义一个 Person 对象, 它具有若干个属性, 其中的Action 是匿名字段 type Person struct { name string // 姓名 gender string // 性别 age int ...原创 2018-06-24 15:20:44 · 950 阅读 · 0 评论 -
Go 数组和Slice
GO 语言中 和Java 的数组类似都是固定长度的定义数组Go 语言中数组的定义有两种方式 1. 使用 var 来定义 语法如下: var name[length]Type 定义数组需要定义其 名称,长度,数组里面保存的数据类型 例如: var index [10] int var name [20] string ……… 2. 如果在函数内部定义数组并且...原创 2018-06-17 22:18:15 · 559 阅读 · 0 评论 -
GO map
GO 的map 数据类型和其他语言一样都是基于hash 表来做的key-value的组合go 创建map的两种方法1 使用 make 关键字进行创建例如:dict := make(map[string]int) 其中string 代表了key是string类型的 int 代表 value 是int 类型 设置键值对 dict["oracle"] = 1521 dict...原创 2018-06-19 21:30:28 · 276 阅读 · 2 评论 -
GO http
go 语言的http 包可以很方便的构建一个简单的http server下面我们通过代码来熟悉go 的http 包package growthimport ( "net/http" "log" "fmt")// golang 第九天 学习 go web 编程// 简单的go web server 可以通过net/http 包来实现func Day..原创 2018-07-03 22:46:55 · 214 阅读 · 0 评论 -
go 操作数据库
go 操作数据库需要下载各个数据库的驱动下面以关系型数据库mysql 和非关系型数据库redis 为例子讲解一下go 如何与数据库交互下载数据库驱动mysql : go get github.com/go-sql-driver/mysqlredis: go get github.com/garyburd/redigo/redis 连接mysql 代码demopacka...原创 2018-07-12 21:40:33 · 981 阅读 · 0 评论 -
go 操作xml 和 json
go 操作xml 和 json 分别使用 encoding/xml 和 encoding/json 来实现 下面我们通过代码来讲解一下go 操作xml 文件 和 json 格式数据读取xml 假设我有一个xml 文件如下 C:\\Users\\admin\\go\\src\\html\\mgr.xml<?xml version="1.0" encoding="utf-...原创 2018-07-12 22:16:07 · 874 阅读 · 1 评论 -
go 数据类型转换
在编程过程中我们经常遇到各种数据类型的转换,例如 string 类型的转换成int 在go 里面使用strconv 包来实现其他类型转string 使用Format系列函数来实现 来看demofunc FormatString() { // Format 系列函数把其他类型的转换为字符串 // bool 转string bool2str := strc...原创 2018-07-14 19:49:35 · 913 阅读 · 0 评论 -
go socket编程
go的网络应用方面程序的编写都在net包里面, 比如net/http, net/rpc, net/mail, net/smtp 等, 今天我们主要来讲解如何使用net/socket 来编写一个socket 客户端和服务端 使用net包来检查 ip 地址是否是合法的ip 地址我们可以使用net.ParseIP() 方法来检查, 如果该方法返回了nil 则说明ip 地址是错误的,比如 1...原创 2018-07-28 21:26:30 · 881 阅读 · 0 评论 -
GO学习笔记(条件判断,循环,分支,label)
今天学习了go语言的条件判断(if-else), 循环(for go 里面没有while 循环), 分支(switch-case), 代码块(label) 条件判断 if-elsego 里面的条件判断和其他语言的区别是go的条件判断里面条件表达式是没有括号的, if 条件的左边花括号 必须和 if 在同一行,不可换到下一行 因此如果写成下面这种是错误的package main...原创 2018-04-08 21:33:54 · 616 阅读 · 0 评论