自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 golang 平时遇到问题 积累

通道有无缓冲区 的应用场景 以及理解无缓冲 实现同步package mainimport "fmt"func main() { t := make(chan int) fmt.Println("waiting") go func() { fmt.Println("some") }() //t <- 100 // 明白了 任何一个操作都会阻塞到这里 只有消费掉才可...

2020-02-29 12:50:43 81

原创 golang 接口

接口一组method 签名的组合 通过interface 来定义对象的一组行为interface 就是一组抽象方法的集合interface 类型interface 类型定义了一组方法, 如果某个对象实现了某个接口中的方法, 则此对象就实现了此接口interface 值如果定义了一个interface 变量, 那么这个变量里面可以存实现这个interface的任意类型的对象。空int...

2020-02-27 18:08:07 52

原创 Golang 下划线语义

丢弃返回值_,err := Test()用在变量接口断言 用来判断对象是否实现了接口package mainimport ( "fmt" "yangxd/te")var _ Foo = Dog{} // 如果没有实现 则 会编译失败 用来判断Dog 对象是否实现了Foo 接口func main() { fmt.Println("主要") fmt.Println("...

2020-01-08 14:41:35 71

原创 socket 通信 封装 协议 基础

Big Endian && Little Endianendian 字节存储次序 端模式Big Endian 是低端地址存放最高有效字节(MSB)Little Endian 低端地址存放最低有效字节(LSB)以数字 0x12345678 不同字节CPU 中的存储顺序Big Endian低地址 ...

2020-01-02 15:39:39 111

原创 redis分布式锁的实现 golang

代码获得锁 释放锁分布式锁可用必须满足一下四个条件互斥性 在任意时刻 只有一个客户端能获取到锁不会发生死锁 即使有一个客户端 在持有锁的期间奔溃而没有主动解锁, 也能保证后续客户端能解锁具有容错性 只要大部分的redis 节点正常运行, 客户端就可以加锁和解锁解锁加锁同一个客户端。 加锁和解锁必须是同一个客户端,客户端不能把别人加的锁给解除了。package main...

2019-12-16 12:50:28 281

原创 go语言协程 并发

协程目前比较流行的并发模式多进程 资源开销最大 好处 进程间 互不影响。 系统开销大 所有进程都是由内核管理的。多线程 多线程在大部分操作系统上面都属于系统层面的并发模式。 比多进程的开销小, 但是总体开销大基于 回调的非阻塞 异步IO协程 本质是用户态线程 不需要操作系统来进行抢占式调度, 且是在真正 的实现中寄存于线程中。因此线程开销很小, 有效的提高线程任务的并发性, 而避免多...

2019-07-23 17:22:01 175

原创 golang Timer Tricker

Timer Tricker 代码package mainimport ( "fmt" "sync" "time")/***ticker只要定义完成,从此刻开始计时,不需要任何其他的操作,每隔固定时间都会触发。*timer定时器,是到固定时间后会执行一次*如果timer定时器要每隔间隔的时间执行,实现ticker的效果,使用 func (t *Timer) Reset(d D...

2019-07-17 17:43:17 198

原创 golang sync.WaitGroup 用法

执行一个简单协程package mainimport ( "fmt" "time")func main(){ for i := 0; i < 100 ; i++{ go fmt.Println(i) } time.Sleep(time.Second)}分析:为什么会有sleep 呢, 主线程为了等待goroutine...

2019-07-17 16:57:06 1279

原创 golang time.Duration() 问题

问题package mainimport "time"func main(){ connectTimeout := 10 time.Sleep(time.Second*connectTimeout)}这样使用会报错int and time.Duration are different types. You need to convert the int to a ti...

2019-07-17 13:36:15 2589

原创 golang redigo 发布订阅使用

redigo 对 发布订阅的使用redigo 对redis 的发布订阅机制放在pubsub.go 中订阅主题后 通过Receive() 函数接受发布订阅主题的消息// Receive returns a pushed message as a Subscription, Message, Pong or error.// The return value is intended to be...

2019-07-16 16:32:32 559

原创 golang 疑问知识点总结

函数作为值 作为类型在go 中函数也是一种变量, 我们可以通过type 来定义它, 他的类型就是所有拥有相同的参数, 相同的返回值的一种类型。type typeName func(input1 inputType1 , input2 inputType2 [, ...]) (result1 resultType1 [, ...])函数作为类型的好处:可以把这个函数当作类型来传递函数 当作...

2019-07-16 15:57:27 46

原创 golang int int64 之间的转化 string

1、string 转intint,err := strconv.Atoi(string)2、 string 转int64int64Obj , err := strconv.Parselnt(string, 10, 64)3、int 转strings, err := strconv.itoa(int)4、int64 转成strings , err := strconv.Forma...

2019-07-04 14:48:14 3330

原创 golang使用sqlx 操作 mysql

sqlx 官方文档https://github.com/jmoiron/sqlx文档甚好, 基本的 连接和使用都有 , 除了 insert 外最经常使用到的就是 select one 这些比 原生的sql api 好用太多 封装了 连接 建立关闭 等操作package mainimport ( "database/sql" "fmt" "log" ...

2019-06-01 18:23:45 3432

原创 golang redigo 基本使用

序列化 反序列化为了 获得的数据能是我们想要的数据 类型需要对数据进行 序列化 和反序列化序列化在redis 存值的时候需要否则 有 slice 的可能就无法解析func Serialization(value interface{}) ([]byte, error) { if bytes, ok := value.([]byte); ok { return bytes, nil...

2019-06-01 16:27:01 1437 1

原创 mgo基本使用

添加db.getCollection('opinion').find({"_id":ObjectId("5cebad9dfd86550001f72c29")})err = c.Insert(&User{ Id_: bson.NewObjectId(), Name: "yang", Age: 12, JoinedAt: ...

2019-05-27 19:51:32 295

原创 mgo 并发

官方权威https://www.mongodb.com/blog/post/running-mongodb-queries-concurrently-with-go代码package mainimport ( "fmt" "github.com/globalsign/mgo" "github.com/globalsign/mgo/bson")// mgo 并发处理 https...

2019-05-27 18:15:31 347

原创 golang yaml使用

config.yaml 文件mysql: host: 192.168.1.300redis: database: 10mongo: host: 192.168.1.300config.gopackage yamlDemoimport ( "gopkg.in/yaml.v2" "io/ioutil" "log" "os" "path/filepath" "...

2019-05-24 19:08:30 515

原创 golang 集成logrus 到项目中

github 官网https://github.com/sirupsen/logrus代码package main/**依赖网址https://github.com/Sirupsen/logrushttps://github.com/onrik/logrushttps://github.com/keepeye/logrus-filename高级实用https://juej...

2019-05-24 19:04:14 436

原创 golang 环境安装

GoGo:国外: https://golang.org/下载地址:国外: https://golang.org/ 需要翻墙。国内: https://studygolang.com/dl配置GOPATH与GOROOT:# Windows GOPATH = E:\GoProject GOROOT = D:\Go\ # Linux export GOPATH = /...

2019-05-14 18:27:48 125

原创 govendor 使用文档

GO管理工具 govendor主页:github.com/kardianos/govendor快速安装使用:go get -u github.com/kardianos/govendor安装之后,会在 GOPATH/bin目录下面。 (工作目录下)流程# 1、创建项目,在GOPATH目录下,# 2、使用 govendor init 初始化项目,生成vendor 文件夹和 vend...

2019-05-14 18:24:32 123

原创 golang闭包递归研究

闭包理解闭包:闭包是指延伸了作用域的函数, 其中包含函数定义体中引用、但是不在定义体中定义的非全局变量。函数是不是匿名没有关系, 关键是他能访问定义体之外定义的非全局变量。闭包基本概念:闭包是可以包含自由(未绑定到特定对象)变量的代码块, 这个变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义。要执行的代码块(由于自由变量包含在代码块中, 所以这些自由变量以及他们引...

2019-05-08 15:15:31 495

原创 Golang iris API文档生成器

官方文档https://github.com/betacraft/yaag这里有各个 框架的 使用方式安装使用1、 下载YAAG 中间件go get github.com/betacraft/yaag/...2、引入对应的包Import github.com/betacraft/yaag/yaagImport github.com/betacraft/yaag/irisyaag...

2019-03-24 14:37:02 2591 1

原创 mysql 规范

一、数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,并且最后不要超过32个字符临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关...

2019-01-18 15:49:51 152

原创 进程线程 协程 通信理解

线程与进程之间的区别区分这些之间的不同以及之间的通信原则, 也是真正理解和使用并发的基础, 如果这些关系理解不透彻那么也 并发开发也是一句空话。对理解数据库设置的连接池, 全局变量 最后算应该有多少个连接数的时候用的到。区别理解每个进程都有自己的地址空间。 两个进程中的地址即使相同, 实际指向的位置也是不同的。进程间通信一般都是通过操作系统的公共区进行。同一进程中的线程因同属于一个地址...

2019-01-17 14:31:08 374

原创 tornado + tormysql 异步使用数据库 提高并发能力

基础https://blog.csdn.net/yangxiaodong88/article/details/86494125本篇文章已经讲解了怎么基础使用tormysql 异步客户端去操作mysql封装前的demo主要是在 db_base 里面对增删demo 获取集合的sql @classmethod async def get_10(cls): as...

2019-01-17 11:00:22 1204

原创 tormysql 使用

创建连接池https://pypi.org/project/TorMySQL/import tornado.ioloopfrom project_settings.db_settings import DBMysqluser = DBMysql[0]["user"]host = DBMysql[0]["host"]db = DBMysql[0]["db"]password = DB..

2019-01-17 10:03:56 809

原创 异步 信号量

tornado 中的 信号量1 自己手动 释放from tornado import genfrom tornado.ioloop import IOLoopfrom tornado.locks import Semaphoresem = Semaphore(2)async def worker(worker_id): await sem.acquire() try...

2019-01-14 17:44:07 258

原创 异步资源

mongo 异步客户端motorhttps://motor.readthedocs.io/en/stable/mysql 异步客户端tormysqlhttps://pypi.org/project/TorMySQL/

2019-01-14 14:56:39 124

原创 tornado 异步资源

异步资源https://github.com/tornadoweb/tornado/wiki/Links

2019-01-10 16:18:13 57

原创 sqlalchemy session SQLAlchemy会话与事务控制

http://www.codexiu.cn/python/sqlalchemy基础教程/531/#toc26

2018-11-11 00:07:19 1423

原创 python操作RabbitMQ

一、安装RabbitMQhttps://blog.csdn.net/yangxiaodong88/article/details/83088569二 用Python操作 RabbitMQRabbitMQ 是一个在AMQP 基础上完成的, 可复用的企业消息系统。他遵循Mozilla Public License开源协议。2.1 基于queue实现的消费者生成者模型import Queue...

2018-10-30 08:55:38 223

原创 安装centos7 ifconfig看不到ip地址

修改文件vi /etc/sysconfig/network-scripts/ifcfg-ens33onboot =no 改成yes然后重启网络sudo service network restart

2018-10-27 16:32:41 1332

原创 RabbitMQ不错文章

1 注释比较多https://www.cnblogs.com/syuee/p/7580166.html2 简洁明了https://www.cnblogs.com/ccorz/p/5710098.html

2018-10-23 09:02:10 74

原创 tonado 开发环境下 tornado 自动重启

tornado.web.Application( handlers=[(r'/', HelloHandler)], template_path=os.path.join(os.path.dirname(__file__), 'templates'), ui_modules={'Hello': HelloModule}, deb...

2018-10-22 20:03:25 923

原创 python3 RabbitMQ ( RPC!)

What This Tutorial Focuses On在第二个教程中,我们学习了如何使用工作队列在多个工作者之间分配耗时的任务。但是,如果我们需要在远程计算机上运行一个函数并等待结果呢?那是另一回事了。这种模式通常称为远程过程调用或RPC。在本教程中,我们将使用RabbitMQ构建RPC系统:客户机和可伸缩RPC服务器。由于我们没有任何值得分发的耗时任务,我们将创建一个返回斐波那契数的虚...

2018-10-21 18:05:06 350

原创 python3 RabbitMQ ( Topics!)

准备知识What This Tutorial Focuses On在前面的教程中,我们改进了日志系统。我们没有使用只能进行虚拟广播的扇出交换,而是使用了直接交换,并获得了选择性地接收日志的可能性。虽然使用direct exchange改进了我们的系统,但是它仍然有局限性——它不能基于多个标准进行路由。在我们的日志系统中,我们可能不仅要根据严重性订阅日志,还要根据发出日志的源订阅日志。您可能...

2018-10-21 17:08:21 374

原创 python3 RabbitMQ ( Routing !)

预备知识What This Tutorial Focuses On在前面的教程中,我们构建了一个简单的日志系统。我们能够向许多接收器广播日志消息。在本教程中,我们将为它添加一个特性——我们将使订阅消息的一个子集成为可能。例如,我们将能够仅将关键错误消息直接指向日志文件(以节省磁盘空间),同时仍然能够在控制台打印所有日志消息。绑定在前面的例子中,我们已经创建了绑定。您可能会回忆代码如下:...

2018-10-20 13:05:49 132

原创 python3 RabbitMQ ( Publish/Subscribe)

What This Tutorial Focuses On在前面的教程中,我们创建了一个工作队列。工作队列后面的假设是,每个任务只交付给一个工作者。在这一部分中,我们将做一些完全不同的事情——我们将向多个消费者传递消息。这种模式称为“发布/订阅”。为了说明这个模式,我们将构建一个简单的日志系统。它将由两个程序组成——第一个程序将发出日志消息,第二个程序将接收并打印它们在我们的日志系统中,接收...

2018-10-19 16:05:35 166

原创 python3 RabbitMQ (Work Queues!)

Work Queues与其他Python教程一样,我们将使用Pika RabbitMQ客户机版本0.11.0。本章的指南关注什么呢?在第一个教程中,我们编写了从一个命名队列发送和接收消息的程序。在本例中,我们将创建一个工作队列,用于在多个工作者之间分配耗时的任务。工作队列(又名:任务队列)背后的主要思想是避免立即执行占用大量资源的任务,并且必须等待它完成。相反,我们把任务安排在以后完成。...

2018-10-19 14:01:26 378

原创 python3 RabbitMQ (Hello World!)

介绍RabbitMQ 是一个消息代理:它接收和转发消息。你可以把它看作是一个邮局:当你想把你要投寄的邮件放在邮箱里时,你可以确定收信人先生或女士最终会把邮件寄给你的收件人呢。 在这个类比中, RabbitMQ 是一个邮箱, 一个邮局和一个邮递员。RabbitMQ 和邮局之间主要区别是它不是纸质的, 而是, 接收, 存贮和转发二进制数据 - 消息RabbitMQ 和消息传递 通常使用一下术语。...

2018-10-19 11:49:15 2163

提示
确定要删除当前文章?
取消 删除