Go语言中文网 为您找到相关结果 973

golang面试题整理

golang面试题整理 1、go的调度 2、go struct能不能比较 因为是强类型语言,所以不同类型的结构不能作比较,但是同一类型的实例值是可以比较的,实例不可以比较,因为是指针类型 3、go defer(for defer),先进后出,后进先出 func b() { for i := 0; i < 4; i++ { defer fmt.Print(i) } } 4、select可以用于什么,常用语gorotine的完美退出 golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作 每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作 5、context包的用途 Context通常被译作上下文,它是一个比较抽象的概念,其...阅读全文

博文 2019-01-18 23:34:43 yongfutian

go语言使用redis —— redigo

redis的client有好多好多,go语言的client在redis官方有两个推荐,radix和redigo。选择哪一个好呢?确实很纠结,后来掷硬币决定选择redigo了。 redis、go、redigo的安装就不需要提了,不能强行增加篇幅。 redigo使用起来很人性化,api设计的符合直觉,我对redis了解较少,使用过程中基本没有遇到障碍。 redigo的使用入门可以去查godoc:http://godoc.org/github.com/garyburd/redigo/redis 接下来就是毫无技术含量的贴代码了: 连接redis我一般是这样写的: 1 c, err := redis.Dial("tcp", "127.0.0.1:6379") 2 if err != nil { 3 ...阅读全文

博文 2015-07-24 03:00:00 wolfred7464

GoLang redis 连接池

最近被日志是折腾得死去活来,写文件无疑效率是最高的,但是分布式又成问题,虽然稍微折腾一下配合NFS,还是可以搞一搞的,但是始终语言设计没有那么方便。 最终决定用redis,换了redis以为就好了,因为内存运行嘛,谁知道tcp连接开销大得一塌糊涂,服务器负载一下子高了许多,使用netstat -an 查看发现一堆的 TIME_WAIT,连ssh到服务器都巨慢无比,所谓天下武功唯快不破,这么慢80岁老太太跳一支广场舞都能给灭了吧。 既然 tcp连接开销这么大,当然首要任务就是解决连接问题,明显一个请求一次连接是很不靠谱的,还不如直接往硬盘写日志呢,当然写日志第一段也说了,不支持分布式,业务分配没那么好。 那么,能不能先定只用一个连接呢,这显然是不行的,一个连接多个php-fpm互掐也会造成瓶颈...阅读全文

博文 2015-05-07 14:00:01 echo不惑

基于Go实现的分布式MQ

基于Go实现的分布式MQ 2015-09-14 赵超 讲师:赵超(Beta版厨子3.0) 个人简介: 6年的Java开发经验、先后就职于淘宝Java中间件团队、腾讯无线媒体产品部。现就职于陌陌担任基础业务组主管。专注于分布式消息总线、LBS技术领域、golang在大规模生产换环境应用的探索。 今天交流的内容也是我上半年主要做的一个开源的MQ的项目,希望对大家有帮助 一、RPC与MQ之间对比 我们通常接触到的RPC同步调用的种类非常多比如fb 的thrift/阿里的dobbo 腾讯的taf、淘宝的hsf这类同步调用框架 从图里面可以看到作为一个业务完成后端要发生非常多的RPC通信 随着业务的复杂度提高,各服务间的依赖度也逐步加大,那么服务间的响应时间也就各有参差了 在一个请求链路上如果存在一个...阅读全文

博文 2015-10-24 05:00:01 zdy0_2004

golang定时任务详解

在程序中经常需要按照指定的周期(以毫秒计)来调用函数或计算表达式,也即实现定时任务,使用time包中Tick和Sleep可以轻松实现定时任务 使用Tick每隔100毫秒打印“Hello TigerwolfC” for range time.Tick(time.Millisecond*100){ fmt.Println("Hello TigerwolfC") } 每隔100毫秒打印 “Hello TigerwolfC”,也可以使用 time.Sleep() for{ time.Sleep(time.Millisecond* 100) fmt.Println("Hello TigerwolfC") } 每隔5秒执行f()函数 c := time.Tick(5 * time.Second) for...阅读全文

博文 2019-02-24 19:34:43 不屈真实

go-redis使用

``` package main import ( "fmt" "log" "math/rand" "sync" "time" "github.com/go-redis/redis" ) var redisdb *redis.Client var wg sync.WaitGroup func main() { wg.Add(1) go testRedisBase() wg.Wait() } func testRedisBase() { defer wg.Done() //连接服务器 redisdb = redis.NewClient(&redis.Options{ Addr: "localhost:6379", // use default Addr Password: "", // no ...阅读全文

博文 2019-12-21 12:58:10 bytemode

GO语言的开源库

Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.org gowalker gosearch Sourcegraph Contributing To edit this page you must be a contributor to the go-wiki project. To get contributor access, send mail to adg@golang.org from your Google Account. Dead projects If you find a project in this list that is ...阅读全文

博文 2015-02-17 03:00:01 chu888chu888

Go语言(golang)开源项目大全

内容目录 Astronomy 构建工具 缓存 云计算 命令行选项解析器 命令行工具 压缩 配置文件解析器 控制台用户界面 加密 数据处理 数据结构 数据库和存储 开发工具 分布式/网格计算 文档 编辑器 Encodings and Character Sets Games GIS Go Implementations Graphics and Audio GUIs and Widget Toolkits Hardware Language and Linguistics 日志 机器学习 Mathematics Misc Music 网络 Operating System Interfaces Other Random Toys, Experiments and Example Code P2...阅读全文

博文 2015-07-11 03:00:01 davygeek

go语言的new和make

golang的new和make主要区别如下: 1、make只能用来分配及初始化类型为slice,map,chan的数据;new可以分配任意类型的数据 2、new分配返回的是指针,即类型*T;make返回引用,即T; 3、new分配的空间被清零,make分配后,会进行初始化。effective go举了一个例子,见:http://golang.org/doc/effective_go.html#allocation_make 对于struct的分配和初始化,除了可以使用new外,还可以这样做: T {},例如 func TestAlloc(t *testing.T) { type T struct { n string i int f float64 fd *os.File b []byte ...阅读全文

博文 2014-11-17 14:44:16 铁哥

go第三方库的安装例子

go第三方库的安装 设置环境变量GOPATH=c:\go\code 在c:\go\code下创建源代码目录src 进入c:\go\code\src 装第三方库命令 git clone git://github.com/alphazero/Go-Redis.git redis 可以在任意目录执行安装redis go install redis 安装后再c:\go\code目录下生成一个pkg目录并且在目录下生成redis.a 可以在在c:\go\code\src下生成目录文件xn 结构如下 文件内容如下 xn.go package xn import ( "fmt" ) func Helloworld(){ fmt.Println("xn包内的Helloeorld函数") } func xx(...阅读全文

博文 2014-11-29 22:00:10 anlun

基于go语言的消息推送系统架构分析

本系统是猎豹移动基于go语言开发的一套消息推送系统,源码地址:https://github.com/Terry-Mao/goim 一、架构图 二、功能简介 1.comet 长连接服务器,支持长轮训、tcp、websocket连接,有超时机制 2.logic 逻辑处理服务器,消息推送入口,通过userId在router服务器中查找对应的comet服务器,将serverId和消息一起保存到kafka队列,logic是无状态服务器,可以随意增删,因为comet需要连接logic,所以在comet服务器中需要连接logic的通过LVS的虚IP,LVS加了real server后不会断开,所以需要在comet服务触发SIGHUP,重新load配置文件。 3.router 路由服务器,保存userId和...阅读全文

博文 2015-10-24 19:00:05 qinyongbo

A list of Go projects

Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.orggo-searchgowalkerSourcegraph Contributing To edit this page you must be a contributor to the go-wiki project. To get contributor access, send mail to adg@golang.org from your Google Account. Dead projects If you find a project in this list that is de...阅读全文

博文 2014-10-13 13:00:06 julong2011

web个人云笔记

# 前言 **我为什么要写一个个人的云笔记?** (⊙o⊙)…额额额?。。。这件事儿还得从一只蝙蝠说起...... 好了_(:з」∠)_不想扯了...... **~~有以下几个原因:~~** 1. 突然发现有道云笔记不是自己的 我的隐私都在别人的库里?。并且一直想有一个自己的云笔记。 2. 打开全球最大同性交友平台gay....嗯嗯嗯...错了,Github。发现开源的云笔记软件很少几乎没有 3. 想做一个前后端分离的项目,并且想开源分享给大家。 4. 一只蝙蝠的传说。(大家应该清楚?) --- 以上就是我一时冲动,不对。。。一时兴起,所以抄起我的小本本就开干!!来一场说撸就撸的guan......额不对,说撸就撸的码!(时不时就开车。老司机快上车!!?)
...阅读全文

开源项目 2020-03-02 23:09:50 biningo

redis管理工具Redis Web Ui管理工具

# GoRedisManager redis 客户端管理平台(redis manager)【部署简单便捷,SSH连接,用户校验,操作日志等】。欢迎star!! ![redis-login.JPG](https://static.studygolang.com/211119/013cb36705068f945f29b166712a196b.JPG) ![index2.JPG](https://static.studygolang.com/211119/32c19928267d779986a375f2b49fa4e0.JPG) ## 功能清单 * 管理连接、切换DB * 支持 string 类型 * 支持 list 类型 * 支持 set 类型 * 支持...阅读全文

开源项目 2021-11-02 21:49:13 gphper

go modules初探及踩坑(GO11包管理工具)

1、go mod是什么go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。之前Golang 主要依靠vendor和GOPATH来管理依赖库,vendor相对主流,但现在官方更提倡go mod。2、go mod初始化及使用Golang 提供一个环境变量 GO111MODULE 来设置是否使用mod,它有3个可选值,分别是off, on, auto(默认值),具体含义如下:off: GOPATH mode,查找vendor和GOPATH目录on:module-aware mode,使用 go module,忽略GOPATH目录auto:如果当前目录不在$GOPATH 并且 当前目录(或者父目录)下...阅读全文

博文 2019-03-25 16:30:42 kevinhao8

优秀的 Go 存储开源项目和库

可以看到,今年谷歌家的 Go 编程语言流行度有着惊人的上升趋势,其发展也是越来越好,因此本文整理了一些优秀的 Go 存储相关开源项目和库,一起分享,一起学习。 存储服务器(Storage Server) Go 实现的存储服务器 minio - Minio 是一个与 Amazon S3 APIs 兼容的开源对象存储服务器,分布式存储方案 rclone - “用于云存储的 Rsync” - Google Drive, Amazon Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Cloudfile… camlistore - Camlistore 是你的个人存储系统:一种存储、同步、共享、建模和备份内容的方式 torus - ...阅读全文

博文 2017-02-14 11:00:08 编辑部的故事

Go 每日一库之 viper

简介 上一篇文章介绍 cobra 的时候提到了 viper,今天我们就来介绍一下这个库。viper 是一个配置解决方案,拥有丰富的特性: 支持 JSON/TOML/YAML/HCL/envfile/Java properties 等多种格式的配置文件; 可以设置监听配置文件的修改,修改时自动加载新的配置; 从环境变量、命令行选项和io.Reader中读取配置; 从远程配置系统中读取和监听修改,如 etcd/Consul; 代码逻辑中显示设置键值。 快速使用 安装: $ go get github.com/spf13/viper 使用: package main import ( "fmt" "log" "github.com/spf13/viper" ) func main() { vipe...阅读全文

博文 2020-01-20 08:32:38 darjun

Redigo--Go连接Redis

本文主要介绍go Web开发中操作redis。 Redigo是go连接Redis的扩展包,用此包时需先执行: go get github.com/garyburd/redigo/redis 安装完后,在文件中导入redigo即可。 连接redis的样例如下: [html] view plaincopy import ( "fmt" // 导入redigo扩展包 "github.com/garyburd/redigo/redis" ) // 从配置文件获取redis配置并连接 host := beego.AppConfig.String("redis_host") db, _ := beego.AppConfig.Int("redis_db") // tcp连接redis rs, err :=...阅读全文

博文 2015-10-25 21:00:06 wkyb608

Golang-使用goconfig 读取配置文件

使用goconfig 读取ini 配置文件 安装 go get github.com/Unknwon/goconfig 使用方法 加载配置文件 cfg, err := goconfig.LoadConfigFile("conf.ini") if err != nil{ panic("错误") } [mysql] username=root password=123456 url=(127.0.0.1:3306)/baidu [redis] address=127.0.0.1:6379 读取 读取单个值 value, err := cfg.GetValue("mysql", "username") valut, err := cfg.Int("must", int) 读取整个区 sec err...阅读全文

博文 2018-08-07 12:34:49 yunpiao

Redigo--用池管理redis连接

在golang的项目中,若要频繁的用redis(或者其他类似的NoSQL)来存取数据,最好用redigo自带的池来管理连接。 不然的话,每当要操作redis时,建立连接,用完后再关闭,会导致大量的连接处于TIME_WAIT状态(redis连接本质上就是tcp)。 注:TIME_WAIT,也叫TCP半连接状态,会继续占用本地端口。 以下为redis连接池的golang实现: import ( "github.com/garyburd/redigo/redis" "github.com/astaxie/beego" "time" ) var ( // 定义常量 RedisClient *redis.Pool REDIS_HOST string REDIS_DB int ) func init()...阅读全文

博文 2015-06-17 20:15:55 stevefang

来自腾讯架构师对,Redis的实践及思考

来自腾讯架构师对,Redis的实践及思考 导语:当面临存储选型时是选择关系型还是非关系型数据库?如果选择了非关系型的redis,redis常用数据类型占用内存大小如何估算的?redis的性能瓶颈又在哪里? 背景 前段时间接手了一个业务,响应时间达到10s左右。阅读源码后发现,每一次请求都是查询多个分表数据(task1,task2….),然后再join其他表(course,teacher..),时间全部花在了大量磁盘I/O上。脑袋一拍,重构,上redis! 为什么选择redis 拍脑袋做技术方案肯定是不行的,得用数据和逻辑说服别人才可以。 时延 时延=后端发起请求db(用户态拷贝请求到内核态)+ 网络时延 + 数据库寻址和读取 如果想要降低时延,只能减少请求数(合并多个后端请求)和减少数据库寻...阅读全文

博文 2019-08-23 23:32:50 勤奋的码农

Go语言第一深坑 - interface 与 nil 的比较

# interface简介 Go语言以简单易上手而著称,它的语法非常简单,熟悉C++,Java的开发者只需要很短的时间就可以掌握Go语言的基本用法。 interface是Go语言里所提供的非常重要的特性。一个interface里可以定义一个或者多个函数,例如系统自带的io.ReadWriter的定义如下所示: ```go type ReadWriter interface { Read(b []byte) (n int, err error) Write(b []byte) (n int, err error) } ``` 任何类型只要它提供了Read和Write的绑定函数实现,Go就认为这个类型实现了这个interface(duck-type),而不像Java需要开发者使用implemen...阅读全文

博文 2017-08-14 04:03:06 xiaonanln

golang优雅读取环境变量 env

有时候,env会非常多,尤其是现在很多应用都放在doker里,很多配置都是通过环境变量读取,所以希望读取的env能与golang的struct能对应,比如: CONFIG_APP=ENVAPP CONFIG_DEBUG=1 CONFIG_HOSTS=192.168.0.1,127.0.0.1 CONFIG_TIMEOUT=5s CONFIG_REDISVERSION=3.2 CONFIG_REDIS_HOST=rdb CONFIG_REDIS_PORT=6379 CONFIG_MYSQL_HOST=mysqldb CONFIG_MYSQL_PORT=3306 可以通过: import ( "fmt" "time" "os" "github.com/timest/env" ) type con...阅读全文

博文 2018-07-11 12:34:46 看山羊

从程序员到CTO

2019年最新总结,从程序员到CTO,从专业走向卓越,大牛分享文档pdf与PPT整理 整理大牛分享文档如下,持续更新一线开发架构,技术文档见github链接:https://github.com/0voice/from_coder_to_expert 内容有: 网易蜂巢公有容器云架构之路 新浪微博redis优化历程 微博Cache架构设计实践 Go在大数据开发中的经验总结 基于Go构建滴滴核心业务平台的实践 Go in TiDB 负载均衡利器 HAProxy功能剖析及部署案例 高可用技术的实践分享 高性能存储及文件系统 个性化推荐架构设计和实践搜狐视频 工商数据中心架构创新之路 互联网对传统企业应用架构 基于Kafka-Spark Streaming的数据处理系统及测试 交互式直播推流编码器...阅读全文

博文 2019-06-08 23:32:41 耐寒

腾讯大佬:分享百亿级请求高可用Redis分布式集群实践

腾讯大佬:分享百亿级请求高可用Redis分布式集群实践 一、Redis有哪些常用的应用场景 腾讯大佬:分享百亿级请求高可用Redis分布式集群实践 二、Redis选型思考 时延 时延=后端发起请求db(用户态拷贝请求到内核态)+ 网络时延 + 数据库寻址和读取 如果想要降低时延,只能减少请求数(合并多个后端请求)和减少数据库寻址和读取得时间。从降低时延的角度,基于单线程和内存的redis,每秒10万次得读写性能肯定远远胜过磁盘读写性能。 数据规模 以redis一组K-V为例(”hello” -> “world”),一个简单的set命令最终会产生4个消耗内存的结构。 腾讯大佬:分享百亿级请求高可用Redis分布式集群实践 关于Redis数据存储的细节,又要涉及到内存分配器(如jemalloc)...阅读全文

博文 2019-08-26 21:32:49 勤奋的码农

统计redis中某类key的数量,代替keys指令

redis使用过程中会存在查询某类key的数量问题,较简单的办法为通过redis-cli结合keys进行操作,由于keys的工作机制导致线上一般禁用该指令,以下shell脚本通过scan实现统计功能。#!/bin/bashA=$0B=${A##*/}C=${B%.*}running_file_name=$Crunning_flag="run.$running_file_name"REDIS_CLIENT='redis-cli -h 0.0.0.0 -p 6379 -x'function process { echo $0 index=-1 count=0 step=100000 while ((index!=0)) do if [ $index -le 0 ];then index=0 fi...阅读全文

博文 2018-08-17 10:52:54 hansegod

go使用token实现简单的权限管理

这里采用的是在header里设置token进行鉴权,cookie也类似:基本思路为前端在header里设置token,后端采用redis等进行存储,使用中间件进行鉴权,登录时设置token。以下是登录生成token:设置if err:=tools.NewAccountSsdbCache(info.Id,token);err!=nil { c.JSON(403,gin.H{ "status":403, "msg":to.String(err), }) return }方法func NewAccountSsdbCache(userid int64,val string)(err error){ ssdb,err:=common.NewSsdbClient() if err!=nil { retu...阅读全文

博文 2018-04-17 19:40:42 misasky

分布式缓存version_cache

# version_cache version_cache是一个分布式一致性缓存解决方案。 原理:job 将数据打包成版本到redis,实例将存在redis的版本load到本地内存并计算最新版本的生效时间,使所有实例的缓存在同一时间生效来达到所有实例数据的一致。 实用场景:数据量少、非及时生效数据、高并发强一致的场景。如:配置服务,门店服务等 优点: 1. 轻松实现水平扩展,实现千万并发的服务不是梦 2. 数据强一至性,不论启动多少实例,同一时间的数据绝对是一致的(服务器时间一致情况下) 3. 使用简单,实现数据生成接口后就可以像使用缓存一样方便,轻松实现高性能服务 缺点: 1. 数据按版本生效,变更的数据会延迟生效(原则上数据量越小处理越快) 2. 不适...阅读全文

开源项目 2020-06-30 09:15:02

Go-Redis

redis的client有好多好多,go语言的client在redis官方有两个推荐,radix和redigo。选择哪一个好呢?确实很纠结,后来掷硬币决定选择redigo了。 redis、go、redigo的安装就不需要提了,不能强行增加篇幅。 redigo使用起来很人性化,api设计的符合直觉,我对redis了解较少,使用过程中基本没有遇到障碍。 redigo的使用入门可以去查godoc:http://godoc.org/github.com/garyburd/redigo/redis 接下来就是毫无技术含量的贴代码了: 连接redis我一般是这样写的: 1 c, err := redis.Dial("tcp", "127.0.0.1:6379") 2 if err != nil { 3 ...阅读全文

博文 2016-05-13 02:00:02 simbadan

今天,大佬云集的夜幕团队正式成立了!

今天这篇文章是要告诉你,业内多名实力强劲的开发者组建了一个服务于广大开发者的团队。现在,你可能会有下面这些疑问: 为什么要组成团队呢? 这个团队将会给广大开发者带来什么? 团队成员有哪些? 好了,接下来用 3 分钟时间去了解这个团队吧! 夜幕团队简介 夜幕团队 NightTeam 于 2019 年 9 月 9 日正式成立,团队由爬虫领域中实力强劲的多名开发者组成:崔庆才、周子淇、陈祥安、唐轶飞、冯威、蔡晋、戴煌金、张冶青和韦世东。 NightTeam 涉猎的编程语言包括但不限于 Python、Rust、C++、Go,领域涵盖爬虫、深度学习、服务研发和对象存储等,团队技术实力十分雄厚。 为什么要组建一个团队? 据以往经验来看,产出一篇优质的技术文章所耗费的时间是相当长的,读者很难从单个作者那里...阅读全文

博文 2019-09-12 14:32:55 夜幕NightTeam

go语言公共库goredis

golang redis client, bufferd connection, connection pool, support all redis commands, 欢迎大家批评指正,更欢迎大家加入进来。 #### Create a new conn? c, e := Dial("127.0.0.1:6379", pwd, CTimeout, RTimeout, WTimeout, alive, *pool) if e != nil { println(e.Error()) return } 如果redis不需要AUTH认证, password ="" #### A Redis Command. c.GET("mykey") c.SA...阅读全文

开源项目 2014-11-04 11:15:41 翟羽行

给以后的同学攒点golang的面经

只要活着,就不算是悲剧。我们尚在途中,今后仍要继续。——《火花》戳 -> 校招-面经我主要用的还是go,虽然语言不是很重要,但投的基本上是跟go有关的公司,也有一些c++的公司,想往go发展的可以参考我的面经春招春招基本上是过完年回来开始,建议寒假开始复习然后回来就可以找实习了。我春招投的比较晚,后面投的公司不是很多,基本被刷简历,能面试的只有七牛云,然而第一次面试被各种吊打,春招后面去了深圳一家小公司实习了两个月七牛云七牛云的技术还是不错的,虽然实习不想去上海(建议实习不要看地点,实习很短不要介意地点)一面go的调度go struct能不能比较go defer(for defer)select可以用于什么context包的用途client如何实现长连接主协程如何等其余协程完再操作slice...阅读全文

博文 2018-12-07 16:34:51 牛客网

Golang实现一个微信抽奖小程序后台

一、后台整体架构小程序和后台间使用https通信,保证安全性,这也是为了满足小程序官方的硬性规定。腾讯负载均衡作为后台入口有几个好处:帮助处理https的流量,然后解密后再将请求通过http转发给后端的服务器,简化了逻辑,减少了https对后台服务的性能影响,同时还能配置进行动态的伸缩。负载均衡将请求通过http转发给cvm进行处理。nginx做了个反向代理,go服务端跑在本地。使用腾讯云的redis和mysql数据库。redis用于频繁的用户鉴权等,mysql保存常规数据。这样的设计在抽奖这种情境下,已经能保证足够的并发和流量了。如果想提高并发量,可以通过配置负载均衡来进行动态伸缩,然后增加云数据库的处理能力。有时间再写下怎么进行性能评测和相应的提高并发量的升级。更多go语言内容请关注:h...阅读全文

博文 2019-07-05 19:32:51 CC_ab48

重磅福利:Go语言中文网 携手阿里云赠送超值免费套餐

阿里云30+产品、6个月使用权,有码就能开通。包含7款热门产品:云服务器ECS、数据库(redis、Mongodb)、存储OSS等。 参与本次活动需要满足如下条件: 1. 新用户:指从未体验过阿里云云产品的用户,包括未购买过包年包月产品、未开通过按量付费产品的用户; 2. 通过阿里云个人实名认证; 3. 个人芝麻信用分 ≥ 620; 如果你满足条件,通过本站 [兑换邀请码](/gift)(邀请码有效期至2017年9月1日),就可以免费使用半年!!...阅读全文

Go语言开发分布式聊天室

声明 我是一个刚学go语言的菜鸟,还没有资格谈论什么技术分享,只是为了展示fooking的实际应用,同时把我用go写的聊天室代码贴出来供大家消遣,如果有入不了各位法眼的代码,望轻喷。该聊天室基于fooking,而业务代码是采用Go + Fastcgi。 完整的源代码在 https://github.com/scgywx/fooking/blob/master/example/chat/gateway.go,全代码200多行,去掉router部分代码,实际逻辑代码只有170来行,逻辑简单,功能强大。 详解 聊天服务器的入口main函数里有3个IP和端口配置,分别是Chat服务器、Router服务器和Redis服务器。 func main() { listener, _ := net.Liste...阅读全文

博文 2015-08-28 15:00:04 IM鑫爷

golang redis连接池的使用

````golang package main import ( "encoding/json" "errors" "fmt" "time" "github.com/garyburd/redigo/redis" ) const ( RedisURL = "redis://*****:6379" redisMaxIdle = 3 //最大空闲连接数 redisIdleTimeoutSec = 240 //最大空闲连接时间 RedisPassword = "*****" ) // NewRedisPool 返回redis连接池 func NewRedisPool(redisURL string) *redis.Pool { return &redis.Pool{ MaxIdle: redisMa...阅读全文

博文 2018-01-18 11:35:27 hfyarvin

用GO语言实现一个简单的搜索引擎

用GO语言实现一个简单的搜索引擎 项目地址是:https://github.com/wyh267/FalconEngine 对搜索引擎感兴趣的可以去看看这本书,比较浅并且也比较完整的介绍了一个搜索引擎的全部机能。 我的这个搜索引擎原始数据是MySql数据库的,大家可以根据需要进行二次开发,用来支持其他数据库或者本地文件,Detail文件是存储在Redis数据库中,同样这部分也可以根据自己的需要二次开发,使用本地文件或者其他数据库,倒排索引和正排索引本地存储的时候使用的json格式,比较耗磁盘,第一版暂时这样了吧,后续再做优化。 使用方法 依赖以下几个库 github.com/outmana/log4jzl log文件 github.com/ewangplay/config 配置文件解析 gi...阅读全文

博文 2015-07-28 00:00:00 ygrx

Go 语言项目

出处:https://code.google.com/p/go-wiki/wiki/Projects Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.orggowalkergosearchSourcegraph Contributing To edit this page you must be a contributor to the go-wiki project. To get contributor access, send mail to adg@golang.org from your Google Account. Dead proj...阅读全文

博文 2014-10-10 16:00:01 leonzhouwei

Golang redigo hmset hset 问题

最近公司项目,换到了golang 下面来开发,遇到了redis存储链表的问题,困扰了我好几天,后面静下心来,好好读了一下源码,发现官方的例子,最终还是羊毛出在羊身上 c, err := dial() if err != nil { panic(err) } defer c.Close() var p1, p2 struct { Title string `redis:"title"` Author string `redis:"author"` Body string `redis:"body"` } p1.Title = "Example" p1.Author = "Gary" p1.Body = "Hello" if _, err := c.Do("HMSET", redis.Args{...阅读全文

博文 2015-05-13 03:00:05 jackluo

回复:《golang VS php 性能对比》

连接:http://www.oschina.net/question/29420_138135 看到有一篇博文介绍Golang与PHP性能对比,在此回复一下。这测试结果明显是误导人的。 1,PHP未开启OpCache,那么每次都要读磁盘文件。并且编译PHP为OpCode。性能自然会差,开启OpCache试试吧。 2、php+redis一定要扩展版本的redis客户端,原因是redis扩展是长连接的,可以避免短连接带来的网络开销。 3、php-fpm或者Apache,就算只开20个进程。redis这种纯内存操作绝对可以2ms内返回结果(2ms已经算是很差的情况了,一般0.5ms就能得到响应)。那么每个进程至少可以提供500QPS的处理能力(2ms1次,PHP进程是串行执行的,1秒可以500次)...阅读全文

博文 2014-10-23 08:00:01 matyhtf

Redis 集群解决方案Codis

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务. Codis 实现了业务透明的动态/安全扩缩容,高度可运维,proxy-based 的方案,支持无状态的多 proxy 水平扩展。已经在贵荚内部取代了大多数业务的 twemproxy。 架构图: ![架构图](https://raw.githubusercontent....阅读全文

GO中调用redis时,当并发量比较大时出现的问题。

GO中调用redis时,实始化一个连接池,做法也是一般的用户: ```go &redis.Pool{ MaxIdle: beego.AppConfig.DefaultInt("redis::maxidle", 1), MaxActive: beego.AppConfig.DefaultInt("redis::maxactive", 10), IdleTimeout: time.Duration(beego.AppConfig.DefaultInt64("redis::idle_time_out", 180)) * time.Second, Dial: func() (redis.Conn, error) { log.Println("func dia...阅读全文

golang-redis之hash类型简单操作

1:安装redigo go get github.com/garyburd/redigo/redis 2:import redigo import ( "github.com/garyburd/redigo/redis" ) 3:连接redis c, err := redis.Dial("tcp", "192.168.2.225:6379") if err != nil { fmt.Println("connect to redis err", err.Error()) return } defer c.Close() 4:命令执行 n,err := c.Do("hset","key","field","value") //写 result,err := redis.Values(c.Do(...阅读全文

博文 2018-01-26 17:33:06 mickelfeng

BAT架构2019年最新总结,从程序员到CTO,从专业走向卓越

2019年最新总结,从程序员到CTO,从专业走向卓越,大牛分享文档pdf与PPT整理整理大牛分享文档如下,持续更新一线开发架构,技术文档下载地址:https://github.com/0voice/from_coder_to_expert网易蜂巢公有容器云架构之路新浪微博redis优化历程微博Cache架构设计实践Go在大数据开发中的经验总结基于Go构建滴滴核心业务平台的实践Go in TiDB负载均衡利器 HAProxy功能剖析及部署案例高可用技术的实践分享高性能存储及文件系统个性化推荐架构设计和实践搜狐视频工商数据中心架构创新之路互联网对传统企业应用架构基于Kafka-Spark Streaming的数据处理系统及测试交互式直播推流编码器的设计Go在区块链的发展和演进NSQ-重塑之路Al...阅读全文

博文 2019-06-09 18:02:39 音视频高级开发

在go中使用json作为主要的配置格式

最近在用go重构,在先前的代码中,我们使用的ini文件进行配置,但是因为很多历史遗留问题,导致配置混乱,维护困难,自然也需要考虑重构了。 通用配置格式 通用的配置格式有很多,常用的就有ini,json,yaml,xml等,当然为了通用我们不考虑自定义的配置格式。那如何选择呢? 首先,xml我们就不用考虑了,到现在为止我都没觉得用这玩意配置起来有多方便,反而很臃肿,可能java系的童鞋会比较青睐。 再来考虑ini,ini文件对于简单应用的配置可以说是非常方便的,如果配置没有太多的层次结构,使用ini就能完全满足我们的需要,即使有,我们也能够通过加入特定前缀来解决。譬如,我们可能有如下redis配置: [ModuleA] persistent_redis_addr = 127.0.0.1:637...阅读全文

博文 2014-10-04 19:25:55 siddontang

ECUG Con 2011 - 国内第一场 Go 语言为主题的盛宴

ECUG Con 2011 介绍 ECUG.ORG 是 ECUG Con 大会的官方支持站点。 ECUG 全称为 Effective Cloud User Group(实效云计算用户组)。我们关注的是并发模型和分布式开发的最佳实践。 按照 ECUG 的计划,预计每年我们都会举行一次全国性的 ECUG Con 大会。下面是历届的会议资料: 2007年9月8日,CN Erlounge I,珠三角 Erlang 爱好者小聚。无会议资料,但酝酿了之后具有里程碑意义的 CN Erlounge II。2007年10月13~14日,CN Erlounge II (ECUG Con 2007)在珠海召开。金山为大会主要赞助方。2008年12月20~21日,CN Erlounge III(ECUG Con 2...阅读全文

博文 2014-10-19 17:00:00 xushiweizh

用Golang实现redis

缘起 最近公司的第一个PHP转GO项目已经在生产环境稳定运行数周,又逢需求小年儿,得空分享下去年学GO过程中的练手项目Godis——用Golang实现的redis. redis3.0版本,代码简明精炼,再加上是Web后端程序员使用最多组件之一,熟悉redis原理并阅读多源码的开发者人数颇多,这个系列小文便不再对redis细节做过多介绍。不过,有必要系统性说明的地方仍然会以较大篇幅尝试解读。 进入正题 基本流程 Godis第一版的目标是“最基本的kv缓存”,feature list如下: 客户端/服务端交互 set/get 命令实现 AOF持久化实现 已经做到,再精简就等于没写的境界。遵循实际工作中的编码流程,先设计基本架构再填充实现的方式,Godis的架构图一步到位、毫无点缀: 原理分析 1...阅读全文

博文 2018-06-06 11:34:39 alphali

go语言七——连接redis

使用Redigo这个库 package main import ( "fmt" "redis" "time" "strconv" ) var ( server string = "192.168.1.105:6379" password string = "passwd" ) var pool *redis.Pool func test(i int) { c := pool.Get() defer c.Close() t:=strconv.Itoa(i) c.Do("SETEX","foo"+t,20,i) reply, err := redis.Int(c.Do("GET","foo"+t)) if err == nil { fmt.Print(reply) } else { fmt.Pr...阅读全文

博文 2014-10-04 19:26:26 ciaos

使用Redis做任务队列(Golang)

在上篇用纯go在本机模拟了下分布式队列的东西。这里补上Redis队列部份。 用Redis做队列有下面三个问题需解决: 1. 队列构建 使用Redis的RPUSH/LPOP来解决 2. 参数传递/解析 客户端将JOSN参数存入Redis,Server端取出后解析还原。 3. 连接池 redigo支持Redis连接池 下面代码就是具体解决实现: //Redis做后台任务队列 //author: Xiong Chuan Liang //date: 2015-3-25 package main import ( "bytes" "encoding/json" "errors" "fmt" "time" "github.com/garyburd/redigo/redis" ) func main() ...阅读全文

博文 2015-06-17 20:17:45 xcltapestry