zoukankan      html  css  js  c++  java
  • golang database sql DSN (Data Source Name)中的timeout, readTimeout

    golang 语言,在打开mysql DB时,有时会用到timeout,readTimeout两个参数。

    1.timeout

    建立连接超时时间

    例如, "30s", "0.5m" or "1m30s".

    2.readTimeout

    I/O读超时时间

    例如, "30s", "0.5m" or "1m30s".

    2.1 底层实现原理

    2.1.1 readTimeout的初始化

    所在文件:go-sql-driver/mysql/driver.go

    // Open new Connection.
    // See https://github.com/go-sql-driver/mysql#dsn-data-source-name for how
    // the DSN string is formated
    func (d MySQLDriver) Open(dsn string) (driver.Conn, error) {
    .....
    	// Set I/O timeouts
    	mc.buf.timeout = mc.cfg.ReadTimeout
    	mc.writeTimeout = mc.cfg.WriteTimeout
    ....
    

    将配置的timeout赋值到结构体中。

    2.1.2 readTimeout的使用

    文件:go-sql-driver/mysql/buffer.go
    代码:

    // fill reads into the buffer until at least _need_ bytes are in it
    func (b *buffer) fill(need int) error {
    
    ....
    		if b.timeout > 0 {
    			if err := b.nc.SetReadDeadline(time.Now().Add(b.timeout)); err != nil {
    				return err
    			}
    		}
    ....
    

    从上面代码可以看到,通过调用SetReadDeadline()设置读的最大时间。
    每次读消耗的最大时间不超过设置的时间。

    3.参考

    golang mysql driver

  • 相关阅读:
    小程序使用字体图标-阿里版
    vue项目安装vux
    JS日期相减得到天数
    vue的Vuex
    ES6的Promise
    根据坐标拖动(简单)
    JSP 第三周作业
    JSP第二次作业(2)
    第二次JSP作业
    JSP 第一次作业
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/10164863.html
Copyright © 2011-2022 走看看