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

kubernetes 1.8 快速安装,只需三步

到这里购买安装包 只需15 童叟无欺。。。 15块买的不止包还有服务! 没有比我的方式更简单的了。。。 安装 master节点执行init-master.sh node节点执行init-node.sh node节点执行master输出的kubeadm join命令 选装,dashboard,master安装完就可以装这个了,这样dashboard不会调度到node节点:执行init-dashboard.sh把type:ClusterIP改成 NodePort 然后访问dashboard所在节点+端口号即可。 没有然后了,任何问题联系我,100%安装成功...阅读全文

golang server epoll client 使用连接池 15万+ qps

epoll 加连接池 前几天看了epoll 使用,今天写了一个测试脚本,测试一下epoll加连接池的性能 50万个请求,连接池使用2000连接,发送 "test" 服务端接受后 转成大写返回,处理完所有的请求耗时3.731506996s,性能很强大(注意:需要在linux环境下测试) 为什么要使用连接池? 拿数据库举例,频繁的建立、关闭连接,会极大的降低mysql的性能,因为建立连接,释放连接引起的大量性能开销。 连接池技术带来的优势: 1、资源重用 由于tcp得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。 2、更快的系统响应速度 连接池在初始化后运行中。对于业务请求处理而言,...阅读全文

博文 2019-07-11 23:32:39 单龙攀

golang不定长传参

golang不定长传参,三个点... 可以很灵活的传入多个参数,给两个例子,一看就明白了 1、int类型不定长传参 package main import "fmt" func main() { fmt.Println(Sum(1, 4, 6, 7, 8, 9, 100, 200)) } func Sum(numbers ...int) int { result := 0 for _, n := range numbers { result += n } return result } go run test1.go 335 2、map类型不定长传参 package main import "fmt" func main() { fmt.Println(SumMap(map[string]s...阅读全文

博文 2019-12-06 21:33:45 1350368559

write smart proxy step by step 3 (集群实现)

赵雷 有点长,直接看结语好了集群功能第二篇笔记只实现 Redis 协议单机转发,这次要实现完整集群功能,涉及以下几点:1. 代码逻辑模块划分: Server,集群拓扑,后端连接池,Session管理2. Pipeline 实现,对每一个请求封装 Sequence,严格保证应答顺序(实现有些投机,后文再说)3. 对后端返回的 ErrorResp 做解析,特殊处理 MOVED 和 ASK 请求并异步更新集群拓扑4. 性能,永远的话题,通过 Pprof 一步一步去调模块划分Server 层:该层用来解析生成全局配置,初始化其它模块,开启监听端口,接收外部访问请求。其中 Filter 用来对接收的 Redis 协议数据进行过滤,检测是否危险禁止或不支持的命令,并粗略检测命令参数个数,以接口形式实现。...阅读全文

博文 2017-02-10 14:30:51 董泽润

golang orm之gorose 2.0版本正式发布.md

关于gorose 2.0 gorose, 最风骚的golang orm, php版本的laravel eloquent. 经过几个月的重构和打磨, 再加上近一个月的预览版测试和改进, gorose 2.0正式版终于与我们见面了. 新版本做出了重大改动和升级, 完全重构了基础架构和实现方式, 下面, 我们一起来看看gorose 2.0的特点吧 gorose 2.0特点 1. 全新架构 gorose 2.0 采用模块化分离架构, 主要分为4大模块: engin: 初始化gorose和数据库链接,配置解析,连接池启用 session: 数据库操作,事务操作等,采用会话隔离,确保每一个连接和数据库操作都是相互独立的, 充分利用连接池来提升数据库效率 orm: 通过优雅的api来实现对象关系映射,使操...阅读全文

博文 2019-08-01 14:33:49 fizzday

net包--阅读摘记

简介 在net包中有很多的结构体,各种函数各种方法。我自己决定总体上看一遍,然后做个导图。 复制粘贴来源:https://studygolang.com/stati... 常量 const ( IPv4len = 4 IPv6len = 16 ) 全局变量 常用的IPv4地址。 var ( IPv4bcast = IPv4(255, 255, 255, 255) // 广播地址 IPv4allsys = IPv4(224, 0, 0, 1) // 所有主机和路由器 IPv4allrouter = IPv4(224, 0, 0, 2) // 所有路由器 IPv4zero = IPv4(0, 0, 0, 0) // 本地地址,只能作为源地址(曾用作广播地址) ) 很多OpError类型的错误会包...阅读全文

博文 2019-08-12 20:02:39 l1nkkk

小心#Golang#官方文档中没有详细说明的陷阱

近日在高负载时使用 Golang 的 sql driver 时碰到泄漏问题,最后终于发现 database/sql 的文档和 Examples 都没有很好的说明下面2个关键点: 一、 每个 Golang 进程只需要 sql.Open() 一次 最初,想当然的做法是每次有sql请求都先 sql.Open() 。 这实际上是不对的。 database/sql 自己会维护连接池,每次 sql.Open() 会新建一套连接池。虽然不会报错,但是会导致资源浪费。而且我发现在系统资源紧张时会导致锁死的 goroutine 释放不掉, sql.DB.Close() 也未能解决。 二、 每次 Query() 之后,一定要记得 Row.Close() 。 Golang官方文档的Example完全没有关于 Ro...阅读全文

博文 2017-02-09 16:54:17 沈晟

Golang UDP的连接性(网关如何阻碍Golang的UDP通信)

自知乎专栏(防止挂掉):https://zhuanlan.zhihu.com/p/94680036golang中udp的连接性 曾经浮华装逼招雷劈​关注他golang中udp分为已连接和未连接两种,两者在发送、接收消息行为模式上有重大区别背景前段时间,我们组开发一个紧急需求,需要与其它部门某组进行协议交互,暂且称之为B组。 B组底层通信采用UDP形式,使用pb为传输协议,本来很简单的事情,可是联调过程中却遇到一个大坑,关于golang中udp的连接性问题。我们这边采用golang技术栈,以DialUDP的接口与B组交互,先send数据,再recv数据。就这么简单的逻辑,却出问题了,B组能收到我们的请求数据,我们这边却无法接收到B组的返回数据。经过与B组交流,他们那边的架构比较奇怪。我们设计系...阅读全文

博文 2020-05-04 23:32:44 鹿沐浔

打点统计——3(go日志读取分析写入)

uid是服务端给客户端种下的cookie。比如访问百度,同一台电脑同一个浏览器,不管是百度哪个页面,都是这个uid: 区分PV、IV、UV如下:1、pv访问量(Page View),即页面访问量,每打开一次页面PV计数+1,刷新页面也是。 2、UV访问数(Unique Visitor)指独立访客访问数,一台电脑终端为一个访客。 3、IV是初始向量(IV,Initialization Vector)。 redis数据结构HyperLogLog如果我们要实现记录网站每天访问的独立IP数量这样的一个功能 集合实现: 使用集合来储存每个访客的 IP ,通过集合性质(集合中的每个元素都各不相同)来得到多个独立 IP ,然后通过调用 SCARD 命令来得出独立 IP 的数量。举个例子,程序可以使用以下代...阅读全文

博文 2019-04-17 22:35:09 梁十八

golang:mgo剖析之Session

golang操作mongo使用的包是"gopkg.in/mgo.v2",coding过程中需要并发读写mongo数据库,简单观摩了下源码,记录下自己的一些理解,如有错误,敬请斧正。 一般来说,我们直接这样创建一个session: Session, err = mgo.Dial(URL) if err != nil { log.Println(err) } 来看看Dial这个函数做了什么: func Dial(url string) (*Session, error) { session, err := DialWithTimeout(url, 10*time.Second) if err == nil { session.SetSyncTimeout(1 * time.Minute) ses...阅读全文

博文 2017-09-20 17:00:14 chase-wind

G3.1 Go语言正则表达式应用实例

实际应用中,通过灵活组合正则表达式的各种用法,可以实现非常复杂和实用的功能,本节将简单介绍一些常见或典型的应用实例* 注:注意先要导入包github.com/topxeq/goexamples/tools(方法是执行命令go get -v github.com/topxeq/goexamples/tools),如果不用该包,文中代码内的 t.Printfln相当于fmt.Printf加上一个“\n”。-> 匹配中文正则表达式中匹配中文可以根据中文字符的Unicode范围来进行匹配,中文在Unicode编码中的范围是十六进制的4E00至9FA5,在正则表达式中可以用“[\u4E00-\u9FA5]”的范围表达形式来表示。需要特别注意的是,当使用类似“\u4E00”这种表达形式时,不可以用反引号...阅读全文

博文 2020-02-17 20:32:49 陆满庭

golang连接mysql操作示例增删改查

http://www.01happy.com/golang-mysql-demo/ 下载驱动 sudo go get github.com/go-sql-driver/mysql 如果提示这样的失败信息:cannot download, $GOPATH not set. For more details see: go help gopath,可以使用如下命令解决 sudo env GOPATH=/Users/chenjiebin/golang go get github.com/go-sql-driver/mysql GOPATH的值根据自行环境进行替换。 创建测试表 在mysql test库中创建测试表 CREATE TABLE IF NOT EXISTS `test`.`user` (...阅读全文

博文 2016-09-05 14:00:05 liukuan73

2019回顾篇

19年在nginx,redis,mysql,golang,php方面有了自己的领悟,但是感觉一眼看去又道不出所以然,感觉是不是要总结点什么了,以后技术方案选型时候才能清晰的道出所以然。 nginx nginx深入配置篇章教程 看了很多nginx配置文章,还是以实际场景来划分把 0.了解nginx的模块划分的配置结构思想 1.分别以tcp和unix的通讯方式配置 nginx + php-fpm 2.nginx配置静态资源服务器 3.nginx配置location根据不同的路径进行转发到不同项目目录 4.ngixn配置负载均衡(ip模式,权重模式...) 5.nginx 并发场景优化 nginx 结构分析篇 ... #全局块。 events { #events块 ... } http #http...阅读全文

dive into golang database/sql(2)

当我们拿到一个DB实例之后就可以操作数据库了。本篇我们将更加深入database/sql包,共同探讨连接池的维护和请求的处理。 上一篇我们一起学习了what on earth the DB object is。同时我画了一张图进行说明: DB 上图中很多部分在上一篇中都还没有涉及到,因为sql.Open方法仅仅就是返回这样一个DB对象并新开一个goroutine connectionOpener通过监听openerCh来新建连接。本章我们将更加全面更加深入地介绍DB对象,学习它是如何创建连接并维护连接池的。 从db.Query说起 继续那段最常见的代码: db,_ := sql.Open("mysql", "xxx") rows,_ := db.Query("SELECT age,name ...阅读全文

博文 2017-04-06 03:09:15 suoga

Golang Mysql笔记(一)--- 连接与连接池

database/sql database/sql是golang的标准库之一,它提供了一系列接口方法,用于访问关系数据库。它并不会提供数据库特有的方法,那些特有的方法交给数据库驱动去实现。database/sql库提供了一些type。这些类型对掌握它的用法非常重要。DB 数据库对象。 sql.DB类型代表了数据库。和其他语言不一样,它并是数据库连接。golang中的连接来自内部实现的连接池,连接的建立是惰性的,当你需要连接的时候,连接池会自动帮你创建。通常你不需要操作连接池。一切都有go来帮你完成。Results 结果集。数据库查询的时候,都会有结果集。sql.Rows类型表示查询返回多行数据的结果集。sql.Row则表示单行查询结果的结果集。当然,对于插入更新和删除,返回的结果集类型为sq...阅读全文

博文 2019-03-25 09:35:43 阿泽Aze

一次线上接口超时的排查过程

1、事件还原 昨天下午,收到一个504的告警,显然这是一个超时告警。当时由于手头有其他事情,没在意,就只是瞄了一眼,但是引起告警的方法很熟悉,是我写的,第一反应有点诧异。 诧异之后,继续处理手头的工作。 一小时过后,又收到同样的告警,显然不是偶尔,肯定是哪儿出问题了,于是开始排查。 报警的接口是一个Controller层ControllerA的getControllerAMethod接口,其调用了多个微服务,并最终拼装结果数据进行返回。出问题的是ServiceM,ServiceM服务里的getServiceMMethod方法逻辑也很简单,主要是两次数据库查询,从MySQL数据库取到数据并返回给调用方。 调用链如下图所示 2、环境介绍 **语言:**Go **DB:**MySQL **数据库交...阅读全文

博文 2019-09-29 00:34:21 JackieZheng

golang orm之gorose 2.0版本正式发布

## 关于gorose 2.0 gorose, 最风骚的golang orm, php版本的laravel eloquent. 经过几个月的重构和打磨, 再加上近一个月的预览版测试和改进, gorose 2.0正式版终于与我们见面了. 新版本做出了重大改动和升级, 完全重构了基础架构和实现方式, 下面, 我们一起来看看gorose 2.0的特点吧 ## gorose 2.0特点 ### 1. 全新架构 gorose 2.0 采用模块化分离架构, 主要分为4大模块: - engin: 初始化gorose和数据库链接,配置解析,连接池启用 - session: 数据库操作,事务操作等,采用会话隔离,确保每一个连接和数据库操作都是相互独立的, 充分利用连接池来提升数据库效率 - orm: 通过优雅...阅读全文

博文 2019-08-02 11:58:35 fizzday

基于Go和Redis实现一个简单易用的消息队列

项目地址 Github: https://github.com/wuzhc/gmq 喜欢的可以star一下 ^_^ 1. 概述 gmq是基于redis提供的特性,使用go语言开发的一个简单易用的队列;关于redis使用特性可以参考之前本人写过一篇很简陋的文章Redis 实现队列; gmq的灵感和设计是基于有赞延迟队列设计,文章内容清晰而且很好理解,但是没有提供源码,在文章的最后也提到了一些未来架构方向; gmq不是简单按照有赞延迟队列的设计实现功能,在它的基础上,做了一些修改和优化,主要如下: 功能上 多种任务模式,不单单只是延迟队列;例如:延迟队列,普通队列,优先级队列 架构上: 添加job由dispatcher调度分配各个bucket,而不是由timer 每个bucket维护一个time...阅读全文

博文 2019-07-08 09:02:39 wuzhc

写在学习golang一个月后

开发十年,就只剩下这套Java开发体系了 >>> 遇到的问题 连接池。由于PHP没有连接池,当高并发时就会有大量的数据库连接直接冲击到MySQL上,最终导致数据库挂掉。虽然Swoole有连接池,但是Swoole只是PHP的一个扩展,之前使用Swoole过程中就踩过很多的坑。经过我们的讨论还是觉得使用Golang更加可控一些。 框架的选择 在PHP中一直用的是Yaf,所以在Go中自然而言就选择了Gin。因为我们一直以来的原则是:尽量接近底层代码。 封装过于完善的框架不利于对整个系统的掌控及理解。我不需要你告诉我这个目录是干嘛的,这个配置怎么写,这个函数怎么用等等。 >>>阅读全文 (adsbygoogle = window.adsbygoogle || []).push({}); functi...阅读全文

博文 2018-09-23 01:33:05 全部原谅

golang 并发编程基础篇(一)

channel的阻塞的情况 无缓冲channel的阻塞 阻塞是一个听上去逼格很高的一个词,其实就是程序停了,杵在那儿等待程序继续运行的条件,这个条件不发生的话,程序就死翘翘了。 无缓冲channel阻塞的例子之常见的channel误用 无缓冲channel阻塞的条件:发送方和接收方需要同时准备好,否则对方的协程就会阻塞。在ch <- "cmd.0"这个位置,因为没有接收channel数据的协程,一直阻塞,所以,程序不会往下执行 go func,自然就会报错:死锁 解决这个死锁。只要先把接收方协程起了,再往channel发送就行,或者使用有缓冲的channel。 有缓冲channel的阻塞 接收channel数据的协程阻塞 发送channel数据的协程阻塞 有缓冲channel阻塞总结,cha...阅读全文

博文 2019-01-17 16:34:47 Mandelbrot_Kobe

Golang学习笔记之简易聊天系统服务器的搭建

下面先列举一下程序使用到的函数,省的大家去找,直接拷贝官方api的解释吧。 func DialTCP(net string, laddr, raddr *TCPAddr) (*TCPConn, error) DialTCP在网络协议net上连接本地地址laddr和远端地址raddr。 net必须是"tcp"、"tcp4"、"tcp6";如果laddr不是nil,将使用它作为本地地址,否则自动选择一个本地地址。 func ResolveTCPAddr(net, addr string) (*TCPAddr, error) ResolveTCPAddr将addr作为TCP地址解析并返回。 参数addr格式为"host:port"或"[ipv6-host%zone]:port",解析得到网络名和端...阅读全文

博文 2018-12-14 17:34:42 学生黄哲

mysql pool 查询为空

发现了一个不错的包,地址为:https://github.com/hopehook/golang-db 大致把mysql 连接池封装了起来,看着很不错的样子 我尝试了一下,查询为空,不知道为什么,那位高人给看看: my main package: ``` package main import( "github.com/gin-gonic/gin" "net/http" "fecshop.com/module/user" //"fecshop.com/common/cdb" _ "github.com/go-sql-driver/mysql" mysqlPool "github.com/hopeh...阅读全文

Go组件学习——手写连接池并没有那么简单

1、背景 前段时间在看gorm,发现gorm是复用database/sql的连接池。 于是翻了下database/sql的数据库连接池的代码实现,看完代码,好像也不是很复杂,但是总觉得理解不够深刻,于是萌生了自己想写个连接池的想法。(最后也验证了,看源码的理解确实不够深刻,一看就会,一做就跪) 2、连接池的实现原理 什么是连接池 顾名思义是一个池子 池子里面存放有限数量即时可用的连接,减少创建连接和关闭连接的时间 连接是有存活时间的 具体到数据库连接池,我根据自己的理解画了一张获取连接的流程图 从上图我们可以看出,除了连接池的容量大小,我们还有一个最大连接数的限制。池子里的连接让我们不用频繁的创建和关闭连接,同时应该也要有最大连接的限制,避免无限制的创建连接导致服务器资源耗尽,拖垮服务不可用...阅读全文

博文 2019-09-09 01:04:20 JackieZheng

《Go语言四十二章经》第三十九章 Mysql数据库

# 《Go语言四十二章经》第三十九章 Mysql数据库 作者:李骁 ## 39.1 database/sql包 Go 提供了database/sql包用于对SQL数据库的访问,作为操作数据库的入口对象sql.DB,主要为我们提供了两个重要的功能: * sql.DB 通过数据库驱动为我们提供管理底层数据库连接的打开和关闭操作. * sql.DB 为我们管理数据库连接池 需要注意的是,sql.DB表示操作数据库的抽象访问接口, 而非一个数据库连接对象;它可以根据driver打开关闭数据库连接,管理连接池。正在使用的连接被标记为繁忙,用完后回到连接池等待下次使用。所以,如果你没有把连接释放回连接池,会导致过多连接使系统资源耗尽。 导入mysql数据库驱动 ```go import ( "datab...阅读全文

博文 2018-10-18 21:51:59 roteman

快速实现wordpress迁移到RadonDB上

作者: 吴炳锡,知数堂联合创始人及MySQL高级讲师,3306π社区联合创始人,腾讯TVP成员。 本文大概5500字,阅读大概需要15分钟,建议电脑前阅读。大纲如下: 概述 使用Radon attache功能的好处 基本环境描述 把wordpress库加入到Radon中 利用wordpress体验Radon的透明分库分表 总结 可以关注知数堂腾讯课堂上我分享的RadonDB相关视频。 最近发现RadonDB在特性中引入一个新特性:Single table 到分区表快速转换,另外还引进了一个优秀的特性,把现有的MySQL库直接attach到Radon下面。看到这两个特性真是太赞了。可以非常方便用户实现原来的单表,快速变成拆分表,一条命令搞定。具体的issue参考:https://github....阅读全文

博文 2020-03-24 22:32:46 小知_知数堂

关于fasthttp + K8S service负载均衡的一些心得

最近在做一个项目,项目中用golang 写了一个网关gateway,gateway接受来自外部的请求,并转发到后端的容器中。gateway和应用的容器都部署在同一个K8S集群当中。流程如下图 gateway到pod的请求,是通过K8S的dns机制来访问service,使用的是service的endpoint的负载均衡机制。当gateway得到一个请求之后,通过解析对应的参数,然后可以判断需要转发到哪个host,例如:请求转发到service.namespace.svc.cluster.local:8080,然后DNS解析会解析出对应service的clusterIp,通过service转发请求到后端的pod上(具体转发原理可以了解一下kube-proxy的原理),gateway到servic...阅读全文

博文 2020-03-15 08:57:56 xavier-yang

golang 碎片整理之MySQL

MySQL是常用的关系型数据库,本文介绍了go语言如何操作MySQL数据库。 Go操作MySQL 连接 Go语言中的database/sql 包提供了保证SQL或类SQL数据库的广泛接口,并不提供具体的数据库驱动。使用database/sql包时必须注入一个数据库驱动。 下载依赖 go get -u github.com/go-sql-driver/mysql 使用MySQL驱动 func Open(driverName,dataSourceName string)(*DB,error) Open打开一个driverName 指定的数据库,dataSourceName指定数据源,一般包至少包括数据库文件名和可能的连接信息。 package main import ( "database/sq...阅读全文

博文 2019-07-27 16:33:11 霍帅兵

golang 关于rabbmitmq 的简易连接池

说明:网上找了一圈好像没有rabbmitmq连接池的维护比较好的包,索性按照整理出来的自己写了一个简易版的,希望各位大神继续完善,目前只是实现了连接的一部分,具体tabbmitmq 的操作 按照 amqp的说明操作即可这里有大部分的ampq的实例https://blog.csdn.net/lastsweetop/article/details/91038836 /*************************************************** * @Time : 2019/11/21 6:46 下午 * @Author : ccoding * @File : rabbmitmq * @Software: GoLand **************************...阅读全文

博文 2019-11-22 15:54:52 ccoding

请问指针怎么在前端页面赋值

初学者请多多包涵 请问下面的DeviceInfo里引用了CpuInfo,在前端页面怎么赋值呢 使用device.cpu.total在前端页面连输入都不让输,输入以后直接给我清空了 ``` type CpuInfo struct{ Total int 'json:"total"' Around string 'json:"around"' } ``` ``` type DeviceInfo struct{ Version String Serial String Cpu *CpuInfo } ``` 前端vue页面: ```

CPU: <input type="tex...阅读全文

区块链入门教程以太坊源码分析p2p-dial.go源码分析

dial.go在p2p里面主要负责建立链接的部分工作。 比如发现建立链接的节点。 与节点建立链接。 通过discover来查找指定节点的地址。等功能。dial.go里面利用一个dailstate的数据结构来存储中间状态,是dial功能里面的核心数据结构。// dialstate schedules dials and discovery lookups.// it get's a chance to compute new tasks on every iteration// of the main loop in Server.run.type dialstate struct {maxDynDials int //最大的动态节点链接数量ntab discoverTable //disco...阅读全文

博文 2018-10-25 18:35:11 xdl区块链

Go组件学习——database/sql数据库连接池你用对了吗

案例 case1: maxOpenConns > 1 func fewConns() { db, _ := db.Open("mysql", "root:rootroot@/dqm?charset=utf8&parseTime=True&loc=Local") db.SetMaxOpenConns(10) rows, err := db.Query("select * from test where name = 'jackie' limit 10") if err != nil { fmt.Println("query error") } row, _ := db.Query("select * from test") fmt.Println(row, rows) } 复制代码这里maxO...阅读全文

博文 2019-08-26 10:04:16 JackieZheng

golang orm之gorose 2.0版本正式发布

关于gorose 2.0 gorose, 最风骚的golang orm, php版本的laravel eloquent. 经过几个月的重构和打磨, 再加上近一个月的预览版测试和改进, gorose 2.0正式版终于与我们见面了. 新版本做出了重大改动和升级, 完全重构了基础架构和实现方式, 下面, 我们一起来看看gorose 2.0的特点吧 gorose 2.0特点 1. 全新架构 gorose 2.0 采用模块化分离架构, 主要分为4大模块: engin: 初始化gorose和数据库链接,配置解析,连接池启用 session: 数据库操作,事务操作等,采用会话隔离,确保每一个连接和数据库操作都是相互独立的, 充分利用连接池来提升数据库效率 orm: 通过优雅的api来实现对象关系映射,使操...阅读全文

“三次握手,四次挥手”你真的懂吗?

目录 什么是“3次握手,4次挥手” TCP服务模型 TCP头部 状态转换 为什么要“三次握手,四次挥手” 三次握手 四次挥手 “三次握手,四次挥手”怎么完成? 三次握手 四次挥手 为什么建立连接是三次握手,而关闭连接却是四次挥手呢? “三次握手,四次挥手”进阶 ISN 序列号回绕 syn flood攻击 无效连接的监视释放 延缓TCB分配方法 使用SYN Proxy防火墙 连接队列 半连接队列满了 全连接队列满了 命令 小结 “三次握手,四次挥手”redis实例分析 总结 参考资料 记得刚毕业找工作面试的时候,经常会被问到:你知道“3次握手,4次挥手”吗?这时候我会“胸有成竹”地“背诵”前期准备好的“答案”,第一次怎么怎么,第二次……答完就没有下文了,面试官貌似也没有深入下去的意思,深入下去...阅读全文

博文 2019-07-22 22:15:32 qcrao-2018

1 Go 数据库IO(一):Mysql操作

Go使用Mysql 1.database/sql标准包 sql包提供了保证SQL或类SQL数据库的泛用接口。使用sql包时必须注入(至少)一个数据库驱动。参见http://golang.org/s/sqldrivers 获取驱动列表。如使用mysql,则需要注入github.com/go-sql-driver/mysql。 import ( "fmt" "database/sql" _ "github.com/go-sql-driver/mysql" ) //定义一个接收数据库表字段的结构体 type DbPerson struct { Id int `db:"id"` Name string `db:"name"` Age int `db:"age"` Sex int `db:"gende...阅读全文

博文 2019-07-08 17:32:48 GoFuncChan

网络连接超时

服务端 1 .GO实现超时的网络原语:Deadline,Deadline是一个绝对时间值,当达到这个时间段时,所有io操作都会失败,返回超时错误 2 .Deadline不是超时机制,仅仅时一个绝对时间值,不会自动重置,需要每次手动设置 3 .ReadTimeout,WriteTimeout,可以在这两个地方设置超时方法 srv := &http.Server{ ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } 4 .ReadTimeout 1 .从接受Accept到request Body完全被读取,如果不读取body,那么时间截止到读到header为止.内部实现就是在Accept立即调用SetReadDeadli...阅读全文

博文 2019-10-15 23:32:49 aside section ._1OhGeD

golang通用连接池,支持GRPC,RPC,TCP

pool 项目地址 https://github.com/flyaways/pool Pool 用于管理客户端到服务集群之间的连接. Pool的主要功能: 通用连接池 - Pool for GRPC,RPC,TCP.support RPC timeout. 支持集群 - Connet to Cluster. 动态更新 - Danamic update targets. Pool runs on Linux, Mac OS X, and Windows. 声明:当前使用随机数策略达到动态负载均衡. 下载 go get -u gopkg.in/flyaways/pool.v1 导入方法 import "gopkg.in/flyaways/pool.v1" 使用示例 package main im...阅读全文

博文 2019-04-16 20:34:45 cccccc_5538

GoLang Mysql helloworld

一、mysql安装 参考超级详细的mysql安装指南 Root Account Pwd:xxnetCuiXu 二、mysql使用 参考 21分钟MySQL基础入门 MySQL 教程 Mysql在命令行格式下输入命令需要加上“;”分号作为结束。如果不加上“;”分号结束符,那么就意味着命令没有完成,所以一直会出现这个类似于箭头的符号。 CREATE TABLE `user_accounts` ( -> `id` int(100) unsigned NOT NULL AUTO_INCREMENT primary key, -> `password` varchar(32) NOT NULL DEFAULT '' COMMENT '用户密码', -> `reset_password` tinyint...阅读全文

博文 2019-02-15 17:34:48 懒皮

golang通用连接池,支持GRPC,RPC,TCP

pool https://github.com/flyaways/pool Pool 用于管理客户端到服务集群之间的连接. Pool的主要功能: 通用连接池 - Pool for GRPC,RPC,TCP.support RPC timeout. 支持集群 - Connet to Cluster. 动态更新 - Danamic update targets. Pool runs on Linux, Mac OS X, and Windows. 声明:当前使用随机数策略达到动态负载均衡. 下载 go get -u gopkg.in/flyaways/pool.v1 导入方法 import "gopkg.in/flyaways/pool.v1" 使用示例 package main import ...阅读全文

博文 2019-04-16 16:34:47 meagleglass

Go Redigo 源码分析(三) 执行命令

简单使用 简单使用Do函数获取单条和使用童丹请求多条获取多条数据。 func main() { // 1. 创建连接池 // 2. 简单设置连接池的最大链接数等参数 // 3. 注入拨号函数 // 4. 调用pool.Get() 获取连接 pool := &redis.Pool{ MaxIdle: 4, MaxActive: 4, Dial: func() (redis.Conn, error) { rc, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { return nil, err } return rc, nil }, IdleTimeout: time.Second, Wait: true, } con := po...阅读全文

博文 2019-05-30 18:34:37 大二小的宝

Golang连接池的几种实现案例

因为TCP的三只握手等等原因,建立一个连接是一件成本比较高的行为。所以在一个需要多次与特定实体交互的程序中,就需要维持一个连接池,里面有可以复用的连接可供重复使用。 而维持一个连接池,最基本的要求就是要做到:thread safe(线程安全),尤其是在Golang这种特性是goroutine的语言中。 实现简单的连接池 type Pool struct { m sync.Mutex // 保证多个goroutine访问时候,closed的线程安全 res chan io.Closer //连接存储的chan factory func() (io.Closer,error) //新建连接的工厂方法 closed bool //连接池关闭标志 } 复制代码这个简单的连接池,我们利用chan来存储...阅读全文

博文 2020-02-28 18:34:23 Xiao淩求个好运气

golang使用redis(二)

redis连接池使用连接池的目的就是复用之前建立的连接,不用每次都重建TCP连接,提高吞吐率。有几个参数说明一下MaxIdle: pool中最大Idle连接数量MaxActive: pool中最大分配的连接数量,设为0无限制IdleTimeout: idle的时间,超过idle时间连接关闭。设为0 idle的连接不closeWait: 设为true,当请求时如果达到MaxActive会等待有连接被close。设为false,当请求时如果达到MaxActive会返回error package main import ( "fmt" "os" "sync" "time" redis "github.com/gomodule/redigo/redis" ) const ( MAXIDLE = 50...阅读全文

博文 2019-11-14 15:02:43 麦穗儿

Go json.Decoder Considered Harmful

如果你在用 Go 语言编程,并且使用 json.Decoder 反解 JSON 负载,你可能会产生非预期效果。你应该使用 json.Unmarshal 代替 json.Decoder. json.Decoder 被设计用来反解 JSON 流,而非完整 JSON对象。 json.Decoder 会忽略某些不合法的 JSON 语法。 json.Decoder 没有释放网络连接用来重用(会导致拖慢 HTTP 请求到大约4倍时长)。 如果你度过了 json 包的文档,你不会诧异,确实如此。我已经搞错好多次了。大部分开发者发现使用 json.Decoder.Decode(...) 比使用 json.Unmarshal(...) 更方便解析 io.Reader 类型。 1. json.Decoder 为...阅读全文

博文 2018-12-14 21:34:45 FireflyWang

更好的 Golang 的 MongoDB 驱动 `globalsign/mgo`

用 1.3 版本使用 Go 开始,连接 MongoDB 使用的驱动中,最常见的就是:mgo.v2 这个库一度是唯一的选择,它的接口设计合理,与 Golang/MongoDB/bson 适配的也做的不错。然而这个库长期处于无人看管的状态,有一大堆让人难以忍受 bug,其中我们遇到的就有不少: 当短时间执行大量 db 操作把并发执行的与 MongoDB 的连接池增大之后,多余的连接没有被正确的回收掉(即便设置了 maxIdleTimeout 和 minPoolSize)。 执行 bulk 操作的 size 是固定不可配置的。 在我们的线上项目中,偶尔的业务峰值会照成某几个服务短时间大量的 db 操作,而一旦这些 db 操作带来的连接数量被撑大之后,耗尽 db 的连接数资源之后。其他的服务就无法连...阅读全文

博文 2019-09-03 18:32:44 秦川

2019-09-09, beego代码走读,五、ORM

先贴一段README中的使用示例,很像JAVA的JPA的操作,算是致敬了吧?。 func init() { // register model orm.RegisterModel(new(User)) // set default database orm.RegisterDataBase("default", "mysql", "root:root@/my_db?charset=utf8", 30) // create table orm.RunSyncdb("default", false, true) } func main() { o := orm.NewOrm() user := User{Name: "slene"} // insert id, err := o.Insert(&...阅读全文

博文 2019-09-29 21:33:02 aside section ._1OhGeD

[Golang软件推荐] Golang通用连接池

连接池在编程中并不少见,链接数据库,redis等操作都需要连接池,否则就会出现并发问题,如果每次操作都建立一条新的链接将会大大消耗资源,笔者也是在使用thrift-Clinet链接Service端使用的时候出现了并发问题,然后找到了一个通用的连接池的库在这里分享给大家. 附上: 喵了个咪的博客:w-blog.cn go-commons-pool-Github地址:github.com/jolestar/go-commons-pool 1.连接池 在使用之前我们需要先了解清楚连接池的概念,总结下来连接池主要解决以下几类问题: 减少连接创建时间 与数据库还是Thrift等程序建立连接都是有开销的。如果这类连接是“循环”使用的,使用该方式这些花销就可避免。 简化的编程模式 当使用连接池时,具体的操...阅读全文

博文 2020-02-21 14:32:47 文振熙

Go Micro Client 源码分析

概述 Client 主要是用来执行请求服务和订阅发布事件。是对于broker,Transort的一种封装方便使用。 Init 初始化客户端函数 初始化连接池数量和连接池TTL 调用注入的opts函数列表 最后初始化连接池 func (r *rpcClient) Init(opts ...Option) error { size := r.opts.PoolSize ttl := r.opts.PoolTTL for _, o := range opts { o(&r.opts) } // update pool configuration if the options changed if size != r.opts.PoolSize || ttl != r.opts.PoolTTL { ...阅读全文

博文 2019-07-22 18:32:38 大二小的宝

golang基础之数组

文章转载请注明出处www.leexide.com 希望每一位寻求转载的朋友都能够按照要求进行,鼓励原创,尊重原创。 微信公众号:DevOps运维运营之家 QQ号码:1045884038 E-mail:leexide@126.com 如有问题或建议,请关注微信公众号 1 数组介绍 数组是同一类型元素的集合。例如,整数集合 5,8,9,79,76 形成一个数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(注:当然,如果是 interface{} 类型数组,可以包含任意类型) 。 2 数组常见操作 一个数组的表示形式为 [n]T。n 表示数组中元素的数量,T 代表每个元素的类型。元素的数量 n 也是该类型的一部分 。 2.1 数组初始化 一维数组初始化如下 func mai...阅读全文

博文 2018-07-02 21:35:45 Leexide

Go语言实用技巧

基础代码说明 time类:系统的时间类 time.second/minute/hour time.Duration能够对时间进行转换,默认开始是1ns,换算单位是1ms = 1000µs = 1000,000ns,往上到时间的那一层也能正常转换 time类能够自动转换时间,通用的是nuix的时间格式,不需要手动处理时间格式 strings类提供的split方法能够拆分字符串为字符串数组 golang的post的请求和接收,并对数据进行处理 post的发送 func HttpServerSender(data data.SenderData) { jsonss,err :=json.Marshal(data) if err != nil { fmt.Println(err.Error() ) ...阅读全文

博文 2019-01-02 12:34:45 木鱼cavalry