Go-微框架Gin简单使用
文章首发于:clawhub.club
框架的使用对于敏捷开发来说是非常重要的,虽然有不要重复造轮子的老话,但是在使用框架的同时一定要学习人家的思想与实现方式,免得发生没了框架就不会写代码的境地。Gin的github地址:https://github.com/gin-gonic/gin中文文档地址:https://gin-gonic.com/zh-cn/docs/
学习例子1 hello word1234567891011121314import ( "gopkg.in/gin-gonic/gin.v1" "net/http")func main(){ router := gin.Default() router.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "Hello World") }) router.Run(":8000") ...
Go-web服务
文章首发于:clawhub.club
直接贴代码:注释已经写的很清楚了,如果感兴趣可以去github上看整个工程https://github.com/ClawHub/go-study
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768package httpimport ( "context" "fmt" "go-study/src/log" "net/http" "os" "os/signal" "syscall" "time")//测试func DemoHttp() { log.HttpLogger.Info("-------------http-------------") startW ...
Golang使用LMDB
文章首发于:clawhub.club
lmdb的相关简介可以看我的其他博客,这里记录go简单使用lmdb。我使用了https://github.com/bmatsuo/lmdb-go这个开源工具。具体使用代码请参考我的githubhttps://github.com/ClawHub/go-study.git直接上代码:
结构体12345//lmdb客户端结构体 只创建一个lmdb环境,一个DB库type lmdbCliet struct { Env *lmdb.Env DBI lmdb.DBI}
获取lmdb客户端12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849/** * 获取lmdb客户端 *size: sets the size of the environment memory map. *path: Open an environment handle path *name: dbi name */func NewClie ...
Go-redis使用
文章首发于:clawhub.club
项目中用到了redis中间件,所以找了个go版的redis客户端,简单封装后使用。使用的go组件的github地址:https://github.com/go-redis/redis
简单使用
支持单机与集群
使用go.uber.org/zap日志组件
github.com/magiconair/properties 配置文件组件我把例子代码上传到了github:https://github.com/ClawHub/go-study.git
redis_cmd.go123456789101112131415161718192021222324252627282930313233343536373839404142package redisimport ( "github.com/go-redis/redis" "time")//setfunc Set(key string, value interface{}, expiration time.Dura ...
go语言变量声明后的默认值
文章首发于:clawhub.club
在go语言中,任何类型在声明后没有赋值的情况下,都对应一个零值。
整形如int8、byte、int16、uint、uintprt等,默认值为0。浮点类型如float32、float64,默认值为0。布尔类型bool的默认值为false。复数类型如complex64、complex128,默认值为0+0i。字符串string的默认值为”“。错误类型error的默认值为nil。对于一些复合类型,如指针、切片、字典、通道、接口,默认值为nil。而数组的默认值要根据其数据类型来确定。例如:var a [4]int,其默认值为[0 0 0 0]。了解这些之后,在平时的代码编写中,就要注意对于没有赋值的变量进行操作时,一定要先对其值进行判断,以免出现错误。
Go-三个点可变参数
文章首发于:clawhub.club
三个点‘…’ 是go的一种语法糖,本质上是一个数组切片。
作用1、函数的不定参数用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。
1func x(args ...int){}
2、将切片拆散slice可以被打散进行传递。
123//将切片m(含有3个int型元素)拆散成单个int型作为参数调用函数xm := make([]int, 3)x(m...)
项目中碰到的例子使用redis的发布订阅时,发现这边的不定参数用法,记录一下。
123456789// Subscribe subscribes the client to the specified channels.// Channels can be omitted to create empty subscription.func (c *ClusterClient) Subscribe(channels ...string) *PubSub { pubsub := c.pubSub() if len(channels) > 0 ...
Go-syscall.Rlimit
文章首发于:clawhub.club
GO项目中遇到了限制系统资源的功能。
123456789101112131415161718192021222324252627//init the system environmentfunc initSysEnv() { //描述资源软硬限制的结构体 var rLimit syscall.Rlimit //syscall.RLIMIT_NOFILE 一个进程能打开的最大文件数,内核默认是1024 err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit) if err != nil { fmt.Println("Error Getting Rlimit ", err) } fmt.Println(rLimit) // hard limit在资源中只是作为soft limit的上限 rLimit.Max = 999999 //soft limit,是指内核所能支持的资源上限 rLimit.Cur = 999999 err = s ...
Go读取properties配置文件
文章首发于:clawhub.club
使用java的spring的时候,配置文件用的最多的就是properties格式。最近用GO,尝试用一下前人写好的工具,学习。请配置好GO环境,我这使用的是govendor包管理工具。
magiconair/properties 114颗星具体详细介绍,请参考github。
安装1go get -u github.com/magiconair/properties
使用12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849import ( "flag" "github.com/magiconair/properties")func main() { // init from a file p := properties.MustLoadFile("${HOME}/config.properties", properties ...
Go日志框架zap与lumberjack简单配置封装
文章首发于:clawhub.club
简介zapzap是uber开源的Go高性能日志库https://github.com/uber-go/zap
lumberjackLumberjack用于将日志写入滚动文件。zap 不支持文件归档,如果要支持文件按大小或者时间归档,需要使用lumberjack,lumberjack也是zap官方推荐的。https://github.com/natefinch/lumberjack
简单使用工程结构
核心代码LogCore123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051/** * 获取日志 * filePath 日志文件路径 * level 日志级别 * maxSize 每个日志文件保存的最大尺寸 单位:M * maxBackups 日志文件最多保存多少个备份 * maxAge 文件最多保存多少天 * compress 是否压缩 * serviceName 服务名 */func NewLogger(fileP ...
bash govendor command not found
文章首发于:clawhub.club
在GOPATH中的项目下执行govendor init,报错:bash govendor command not found通过查找资料解决:https://stackoverflow.com/questions/42155805/govendor-doesnt-work-from-cmdfirst check that $GOPATH/bin is in your PATH