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

Docker Swarm代码分析笔记(10)——Cluster.validatePendingEngine

Cluster.validatePendingEngine是实际上用来连接Docker engine的代码: // validatePendingEngine connects to the engine, func (c *Cluster) validatePendingEngine(engine *cluster.Engine) bool { // Attempt a connection to the engine. Since this is slow, don't get a hold // of the lock yet. if err := engine.Connect(c.TLSConfig); err != nil { log.WithFields(log.Fields{"...阅读全文

博文 2017-06-25 14:01:50 肖楠

Golang 对MongoDB的操作简单封装

使用MongoDB的Go驱动库 mgo,对MongoDB的操作做一下简单封装 初始化 操作没有用户权限的MongoDB var globalS *mgo.Session func init() { s, err := mgo.Dial(dialInfo) if err != nil { log.Fatalf("Create Session: %s\n", err) } globalS = s } 如果MongoDB设置了用户权限需要使用下面的方法操作 func init() { dialInfo := &mgo.DialInfo{ Addrs: []string{dbhost}, //数据库地址 dbhost: mongodb://user@123456:127.0.0.1:27017 Ti...阅读全文

博文 2019-01-14 12:34:39 进阶默示录

golang 命令行开发基础

os.Args获取命令行参数 os.Args参数列表 0 :程序路径(go run 运行 0 为临时工作目录的路径,编译后运行,0 二进制文件名) 1 第一个参数 2 第二个参数... ... len(os.Args) 参数数量 示例 /** * @Author : jinchunguang * @Date : 19-11-4 上午10:37 * @Project : tcp-chat */ package main import ( "fmt" "os" ) func main() { // 获取命令行参数 fmt.Println("命令行参数数量:", len(os.Args)) for k, v := range os.Args { fmt.Printf("args[%v]=[%v]\...阅读全文

博文 2019-11-04 15:33:23 aside section._1OhGeD

go语言工作笔记

关闭网络连接步骤:1. 直接关闭2. 赋值 nil对与网络连接相关的操作(客户端网络连接、服务器网络连接)都应该: 加锁、解锁```bashconnect *net.Conn // TCP网络连接connectMutex sync.RWMutex // TCP网络连接读写锁使用时:connectMutex.RLock()defer connectMutex.RUnlock()```协程的使用:```bashfor { select { case <-c.ctx.Done(): // 增加退出协程相关操作 return default: } // 增加逻辑代码 // 匿名函数的使用 func(){ // ... }()}```- 注意逻辑代码和业务代码的分层处理,可以抽象的尽量抽象。不要把底层...阅读全文

博文 2019-08-19 20:02:44 Paulin666

[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:48 文振熙

golang 基础(28)defer

square-gopher.png 资源管理与出错处理 defer 调用 有的时候我们需要程序发生错误后需要进行后续的处理,例如关闭文件、结束网络连接等。这时候我们就会用到 def ,如果是 java 的 developer 可以理解为 finally。 确保在函数结束时发生 参数在 defer 语句时计算 defer 列表为后进先出 var wg sync.WaitGroup func say(s string){ for i:=0; i < 3; i++ { fmt.Println(s) time.Sleep(time.Millisecond * 100) } wg.Done() } func main(){ wg.Add(1) go say("Hey") wg.Add(1) go sa...阅读全文

博文 2019-04-03 08:34:39 zidea

Blog.1 database.sql.driver

在事务操作中,要求事务的各个阶段都使用一个Conn连接。在连接被关闭之前,还需要执行rollback操作。 文章翻译了Go源码下database.sql.driver的接口规范,具体实现可以查看源码。 // 包driver定义了数据驱动要实现的接口,具体的实现会在包sql中用到。 // // 更多还是使用包sql中的代码 package driver import ( "context" "errors" "reflect" ) // Value必须是一个驱动可以处理的值、NamedValueChecker接口能够处理的类型 // 或者下面这些类型的实例 // // int64 // float64 // bool // []byte // string // time.Time // //...阅读全文

博文 2019-07-17 23:02:41 渐行渐远

Golang 连接池的几种实现案例

因为TCP的三只握手等等原因,建立一个连接是一件成本比较高的行为。所以在一个需要多次与特定实体交互的程序中,就需要维持一个连接池,里面有可以复用的连接可供重复使用。 而维持一个连接池,最基本的要求就是要做到:thread safe(线程安全),尤其是在Golang这种特性是goroutine的语言中。 作者:Xiao淩求个好运气来源:掘金原文链接:https://juejin.im/post/5e58e3... 实现简单的连接池 type Pool struct { m sync.Mutex // 保证多个goroutine访问时候,closed的线程安全 res chan io.Closer //连接存储的chan factory func() (io.Closer,error) //新建...阅读全文

博文 2020-02-29 15:32:40 Kevin

区块链入门教程以太坊源码分析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...阅读全文

博文 2019-06-12 17:03:20 xczxsa