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

golang中的select用法

早期的select函数是用来监控一系列的文件句柄,一旦其中一个文件句柄发生IO操作,该select调用就会被返回。golang在语言级别直接支持select,用于处理异步IO问题。 select用法同switch类似,如下: timeout := make (chan bool, 1)ch := make(chan int) select { case <-ch: case <-timeout: fmt.Println("timeout!") default: fmt.Println("default case is running") } 可以看出,ch初始化后,case1读取失败,timeout同样失败,因为channel中无数据,直接跳至default执行并返回。 注意,如果没有def...阅读全文

博文 2016-06-01 00:00:00 caiya928

用Go语言写一个Windows的外挂 (上)

本人在一家互联网金融公司上班,对于一家互联网金融公司,最基本的功能就是客户入金和出金,而出金的稳定性是很重要的,出金不畅容易导致投资人恐慌,本文讲的是出金,出金接口我们对接的是招商银行的银企直联系统,那么银企直连系统是一个什么样的程序呢? 没错,这个程序是运行在Windows上的,并且需要插入USBKey才能正常工作,这就意味着,不能简单的使用命令行进行运维管理。 看到这里,做运维的同学的内心应该和我一样是崩溃的。。 跟大家解释一下,这个服务是做什么的,大家可以把这个程序当成是我们的业务系统和招商银行沟通的信使,所有出金操作、查询操作都是通过这个信使来完成。 由于各种未知的原因,比如网络不稳定,或者USBKey插入时间过长产生了一些莫名其妙的错误,那么就需要人工去重启一下服务或重新登录一下账...阅读全文

博文 2017-05-22 03:00:36 ZhengXujin

用Go语言写个外挂(上)

用Go语言写一个Windows的外挂 本人在一家互联网金融公司上班,对于一家互联网金融公司,最基本的功能就是客户入金和出金,而出金的稳定性是很重要的,出金不畅容易导致投资人恐慌,本文讲的是出金,出金接口我们对接的是招商银行的银企直联系统,那么银企直连系统是一个什么样的程序呢? image.png 没错,这个程序是运行在Windows上的,并且需要插入USBKey才能正常工作,这就意味着,不能简单的使用命令行进行运维管理。 看到这里,做运维的同学的内心应该和我一样是崩溃的。。 image.png 跟大家解释一下,这个服务是做什么的,大家可以把这个程序当成是我们的业务系统和招商银行沟通的信使,所有出金操作、查询操作都是通过这个信使来完成。 由于各种未知的原因,比如网络不稳定,或者USBKey插入...阅读全文

博文 2017-05-15 02:43:01 乱入的Coder

golang服务的文件句柄超出系统限制(too many open files)

最近在项目中遇到一个很奇怪的问题,因为修改配置(redis中缓存的),nginx服务突然报upstream timed out (110: Connection timed out),然后去查为什么会出现这样的问题,发现出问题的服务是一个golang的http server,查看程序日志,发现大量的accept4: too many open files报错,第一感觉应该是哪里文件句柄读取没有释放。too many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数...阅读全文

博文 2019-10-09 19:32:43 aside section ._1OhGeD

RobotGo v0.46.0 发布, 修复重要 bug

RobotGo v0.46.0 发布了,Golang 跨平台控制鼠标、键盘、位图、屏幕、窗口句柄以及全局事件监听。 更新: go get -u github.com/go-vgo/robotgo 主要变更: - 增加 robot 分支 - 增加 ActivePID - 增加 FindBit 更新: - 更新 examples 和文档 - 更新 FindIds - 更新 README.md 和 clipboard 修复: - 修复 MoveMouseSmooth 参数错误 - 修复 name 错误 - 修复 FindBitmap 错误 项目地址:https://github.com/go-vgo/robotg...阅读全文

go 语言学习之:chan

chan 是什么 一个变量,但这个变量有点特殊:创建之后,如果不设置它的话,读它的地方会阻塞。 通过这样一种特性实现了 goroutine 的通信。 缓冲机制 c := make(chan int , 1024) 后面的 1024就是指的缓冲区的大小,写的时候,如果缓冲区不慢。则写入操作不会阻塞。 select 监控一系列的文件句柄,一但一个发生变化,就返回。 select{ case <-chan1: case chan2<-1: default: ...阅读全文

博文 2015-07-24 18:00:00 wwq1001

关于pos请求的疑问??

~~~ func postFile(filename string, targetURL string) error { bodyBuf := &bytes.Buffer{} bodyWriter := multipart.NewWriter(bodyBuf)//这一步不是很懂?? //关键的一步操作 _, err := bodyWriter.CreateFormFile("file", filename) len := len(bodyBuf.Bytes()) buf1 := &bytes.Buffer{} buf1.Write(bodyBuf.Bytes()[0:len])//这是什么在干什么??? bodyWriter.Close() buf2...阅读全文

定位golang内存泄露

内存问题一直是服务器一个老大难,最近线上有遇到一个棘手的内存泄露。记录分享一下 希望可以起到抛砖引玉的效果。同时给方便自己好记性不如烂笔头。 使用 gin web框架 所以使用了 github.com/DeanThompson/ginpprof 用法 跟 pprof 一样 只是 复用ginweb端口 go tool pprof -inuse_space http://***.com/debug/pprof/heap pprof.png 我这个懒捣鼓半天,最好想看下堆栈 看内存堆栈1.png 查看堆栈2.png 坑爹代码.png 结果是gorm 事务 begin了,在特定条件下 没有 Commit 或者 Rollback 。导致内存泄露。socket 句柄泄露。 #使用指令 查看句柄 lsof...阅读全文

博文 2019-06-04 21:32:42 数据小菜鸟

Go语言实现日志系统

package main import ( "errors" "fmt" "os" ) func main() { // 准备日志器 l := createLogger() // 写一个日志 l.Log("hello") } // 创建日志器 func createLogger() *Logger { // 创建日志器 l := NewLogger() // 创建命令行写入器 cw := newConsoleWriter() // 注册命令行写入器到日志器中 l.RegisterWriter(cw) // 创建文件写入器 fw := newFileWriter() // 设置文件名 if err := fw.SetFile("log.log"); err != nil { fmt.Print...阅读全文

博文 2019-12-27 19:33:11 huang_he_87

Go网络编程

1.socket编程 本人为通讯小白,所以上网找了一下socket与tcp/ip,http的关系 结论: 简单说就是socket只是一个类似于句柄一样的对象抽象 如果实现的是tcp/ip协议,则socket只是对TCP/IP协议栈操作的抽象,而不是简单的映射关系 如果实现的是http协议,同理可得。 所以每一次socket accept一个client的时候,都会新建一个socket来处理相应的数据交互, 因为ip包的source address是相应的client ip+port, 而destination address都指向同一个server ip+port. 所以,不同socket使用同一个server ip+port, http://blog.itpub.net/14766028/...阅读全文

博文 2016-03-19 10:00:06 luan_tianjiao

golang数据库操作

使用go-sql-driver操作myql数据库 package main import ( "database/sql" _ "github.com/go-sql-driver/mysql" "fmt" ) func main() { //连接数据库,获得连接句柄 db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/huifang5?charset=utf8") if err != nil { panic(err.Error()) } defer db.Close() //执行sql语句返回多行的结果集 result, err := db.Query("select * from hf_test where keshi...阅读全文

博文 2015-08-13 09:00:01 别人说我名字很长

Golang、python在window下设计界面UI第一节。

说起界面,这是一道坎,有人或许会说,GO为什么要写界面UI呢,这本来不是GO擅长的部分,也不是GO该干的事情,这句话我就不爱听了。 举个列子,比如我们用GO语言写个服务器,这个服务器就是用作直播视频聊天的服务器,它的功能包含直播房间在线列表人员,当然GO语言设计的时候,服务器记录了在线列表的 userId、roomId、token、level、ip、chatConent等等。比如我们要监视某个房间的人员列表,看他是否用协议刷了人气,其实就是统计一个IP上有多少帐号,或者监控房间里面是否有机器人在发言,并随时封禁它,或者统计在线直播列表的人数等等,我们用命令行是能够操作上述的东西,但是这么多的动作你能记得住那么多的命令吗? 而且上述那么多的东西显示在黑色框子里面,眼睛看久了不累吗?一旦命令行用...阅读全文

博文 2017-03-17 10:00:33 大洋的顶端

进程 线程 协程 同步 异步 阻塞 非阻塞

参考文章:Python 中的进程、线程、协程、同步、异步、回调进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 一、上下文切换 上下文,指的是程序执行的某一个状态,通常我们会通过调用栈来表示这个状态,栈记载了每个调用层级执行到了哪里,以及执行时的环境情况等所有有关的信息 上下文切换,表达的是从一个上下文切换到另一个上下文的技术。“调度”指的是哪个上下文可以获得接下来CPU时间的方法。 进程 进程是一种古老而经典的上下文系统,每个进程有独立的地址空间,资源句柄,他们之间互不发生干扰。 每个进程在内核中会有一个数据结构进行描述,我们称其为进程描述符。这些描述符包含了系统管理进程所需的信息,并且放在一个叫做任务队列的队列里面。 很显然,...阅读全文

博文 2017-07-17 07:06:29 _heqin

开箱即用 redis mysql 连接池

分享一下很好用的 redis 和 mysql 连接池,可以在项目中直接引用连接池句柄,调用对应的方法。


举个栗子: mysql 连接池的使用 1 在项目子目录放置 mysql.go 2 在需要调用的地方导入连接池句柄 DB 3 调用 DB.Query() redis 连接池的使用 1 在项目子目录放置 redis.go 2 在需要调用的地方导入连接池句柄 Cache 3 调用 Cache.SetString (“test_key”, “test_value”)
连接池库的代码地址: https://github.com/hopehook/golang-db
...阅读全文

go语言 文件读写

文件读写相关的函数在os包中,因此需要先导入os包。 主要有以下几个函数 func Create(name string) (file *File, err error) 直接通过纹面创建文件 func NewFile(fd uintptr, name string) *File func Open(name string) (file *File, err error) 以只读方式打开一个存在的文件,打开就可以读取了。 func OpenFile(name string, flag int, perm FileMode) (file *File, err error) func Pipe() (r *File, w *File, err error) 管道 func (f *File) C...阅读全文

博文 2015-06-17 23:02:39 lichao_ustc

golang讲解(go语言)标准库分析之os(6)

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; Golang标准库 今天我们讲golang标准库的os包type File struct{},还是废话少说直接上代码 (1)os.Create()这个函数是创见一个文件,函数的原型是func Create(name string) (file *File, err error)输入的是名称字符串类型,返回的是一个File的指针和一个error [php] import ( "fmt" "os" "reflect" ) func main() { f, _ := os.Create("widuu_2.go") defer f.Close() fmt.Println(reflect.ValueOf...阅读全文

博文 2017-02-09 18:38:53 widuu

filebeat的“too many open files”的排查

现象 filebeat的日志中出现 2019-04-23T14:28:30.304+0800 WARN transport/tcp.go:36 DNS lookup failure "systemlog-collect-2.novalocal": lookup systemlog-collect-2.novalocal: too many open files 2019-04-23T14:28:39.689+0800 ERROR pipeline/output.go:74 Failed to connect: lookup systemlog-collect-1.novalocal: too many open files 查看设置的max open files 进程的(最终以这个为准): ...阅读全文

博文 2019-04-24 01:34:41 Kinvo

golang学习之select用法

早期的select函数是用来监控一系列的文件句柄,一旦其中一个文件句柄发生IO操作,该select调用就会被返回。golang在语言级别直接支持select,用于处理异步IO问题。 select用法同switch类似,如下: timeout := make (chan bool, 1)ch := make(chan int) select { case <-ch: case <-timeout: fmt.Println("timeout!") default: fmt.Println("default case is running") } 可以看出,ch初始化后,case1读取失败,timeout同样失败,因为channel中无数据,直接跳至default执行并返回。 注意,如果没有def...阅读全文

博文 2016-11-08 13:00:12 caiyezi

服务优雅重启-facebook/grace学习

服务优雅重启-facebook/grace学习 梗概 主要介绍服务优雅重启的基本概念。 逐步分析 猜测 查阅相关资料后,大概猜测出做法 服务重启时,旧进程并不直接停止,而是用旧进程fork一个新进程,同时旧进程的所有句柄都dup到新进程。这时新的请求都由新的进程处理,旧进程在处理完自己的任务后,自行退出。 这只是大概流程,里面还有许多细节需要考虑 分析grace github https://github.com/facebookar... 流程简述 利用启动时的参数(包括命令行参数、环境变量等),重新启动新进程。同时将当前socket句柄给新进程。 旧进程不再Accept,待当前任务结束后,进程退出 源码分析 如何启动新进程 // facebookgo/grace/gracenet/net...阅读全文

博文 2020-04-27 13:32:51 HammerMax

GO学习笔记 - 模版渲染及多种输出

本文主题:基于内置的text/template实现Golang模版渲染,并将结果写入文件、屏幕、变量。 小慢哥的原创文章,欢迎转载 目录 ▪ 定义结构体▪ 定义模版文本▪ 模版渲染及输出方式▪ 完整例子 定义结构体 首先,定义一个结构体,用于后面的模版渲染 type Person struct { Name string Age int Boy bool } 注意:struct的元素必须要可导出(大写打头),否则渲染时候找不到 实例化结构体,用于模版渲染时候获得对应值 foo := Person{ Name: "foo", Age: 18, Boy: false, } 定义模版文本 接下来,定义一个模版文本,此处直接定义了一个常量,表示模版文本 const text = `My name i...阅读全文

博文 2019-08-18 14:03:09 小慢哥

Go语言库系列之dotsql

导读:能单独拎出SQL文件的某一行或几行执行,是不是非常有趣?今天我们来介绍一下这个有意思的库--dotsql。 背景介绍 dotsql不是ORM,也不是SQL查询语句的构建器,而是可以在一个SQL文件中拎出某几行来执行的工具,非常类似于ini配置文件的读取。如果还不理解,我们来看如下内容。 -- name: create-users-table CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR(255), email VARCHAR(255) ); -- name: create-user INSERT INTO users (name, email) VALUES(?, ?) ...阅读全文

博文 2020-04-02 15:37:43 平也

Go语言库系列之dotsql

导读:能单独拎出SQL文件的某一行或几行执行,是不是非常有趣?今天我们来介绍一下这个有意思的库--dotsql。 背景介绍 dotsql不是ORM,也不是SQL查询语句的构建器,而是可以在一个SQL文件中拎出某几行来执行的工具,非常类似于ini配置文件的读取。如果还不理解,我们来看如下内容。 -- name: create-users-table CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR(255), email VARCHAR(255) ); -- name: create-user INSERT INTO users (name, email) VALUES(?, ?) ...阅读全文

博文 2020-04-02 15:34:19 平也

Golang自定义简单日志记录包

包名:mylog main.go package mylog // DEBUG TRACE INFO WARN ERROR CRITICAL const ( DEBUG = iota TRACE INFO WARN ERROR CRITICAL ) // level:0->DEBUG;1->TRACE... also: e.g:mylog.DEBUG... func MyLog(level int, logFilePath string, logFileName string, format string, args ...interface{}) { f := newFileLogger(level, logFilePath, logFileName) f.record_info(leve...阅读全文

博文 2020-04-28 03:32:45 apehole