• Go语言 如何配制 高性能sql.DB 的

    有很多教程是关于Go的sql.DB类型和如何使用它来执行SQL数据库查询的。但大多数内容都没有讲述SetMaxOpenConns(), SetMaxIdleConns() 和 SetConnMaxLifetime()方法, 您可以使用它们来配置sql.DB的行为并改变其性能。 在本文我将详细解释这些设置的作用,并说明它们所能产生的(积极和消极)影响。 开放和空闲连接 一个sql.DB对象就是一个数据库连接池,它包含“正在用”和“空闲的”连接。一个正在用的连接指的是,你正用它来执行数据库任务,例如…

    go开发, 技术干货 2022年3月1日
  • 如何确定一个 Go 变量会被分配在哪里?

    本文作者记录了 Go 变量分配位置的观测技巧和 Go 语言设计思路。 一、由 iter 包引发的疑问 最近在 GitHub 上偶然发现了 Brad Fitzpatrick 的 iter 包,整个包只有 一个函数(一行代码): 但其中的一行注释令人费解: It does not cause any allocations. 1. 空结构体 我们知道,struct{} 是空结构体(empty struct)。关于空结构体,Dave Cheney 在 The empty struct 中作了很好地阐述…

    go开发, 技术干货 2021年12月2日
  • 深入理解Golang Channel 结构

    Go 语言的 channel 底层是什么数据结构?本文深入解析了 channel。 Golang 使用 Groutine 和 channels 实现了 CSP(Communicating Sequential Processes) 模型,channles 在 goroutine 的通信和同步中承担着重要的角色。 在 GopherCon 2017 中,Golang 专家 Kavya 深入介绍了 Go Channels 的内部机制,以及运行时调度器和内存管理系统是如何支持 Channel 的,本文根…

    go开发, 技术干货 2021年11月18日
  • 七步制作精简镜像

    目录 介绍 镜像层(Layers) 制作步骤 lab-1:初始化构建 Redis 镜像 lab-2:优化基础镜像 lab-3:串联 Dockerfile 指令 lab-4:压缩你的镜像 lab-5:使用最精简的 base image lab-6:提取动态链接的 .so 文件 lab-7:为 Go 应用构建精简镜像 总结 参考 介绍 前段时间网易蜂巢曾经推出蜂巢 Logo T恤,用的正是 Docker 镜像制作,最神奇的是,它最终的镜像大小只有 585 字节。 有些镜像都不是我们自己来打包的(比如…

    go开发 2021年11月16日
  • 浅谈 Golang 锁的应用: sync包

    Go 语言 sync 包中的锁都在什么场景下用?怎么用?本文对 sync 包内的锁做了梳理。 今天谈一下锁,以及 Go 里面 Sync 包里面自带的各种锁,说到锁这个概念,在日常生活中,锁是为了保护一些东西,比如门锁、密码箱锁,可以理解对资源的保护。在编程里面,锁也是为了保护资源,比如说对文件加锁,同一时间只也许一个用户修改,这种锁一般叫作文件锁。 实际开发中,锁又可分为互斥锁(排它锁)、读写锁、共享锁、自旋锁,甚至还有悲观锁、乐观锁这种说法。在 Mysql 数据库里面锁的应用更多,比如行锁、表…

    go开发, 技术干货 2021年10月25日
  • Golang 闭包的实现

    什么是闭包?什么场景下会用闭包?本文对 go 语言中的闭包做了详细介绍。 闭包是由函数及其相关引用环境组合而成的实体(即:闭包=函数+引用环境)。 Go中的闭包 闭包是函数式语言中的概念,没有研究过函数式语言的用户可能很难理解闭包的强大,相关的概念超出了本书的范围。Go语言是支持闭包的,这里只是简单地讲一下在Go语言中闭包是如何实现的。 函数f返回了一个函数,返回的这个函数,返回的这个函数就是一个闭包。这个函数中本身是没有定义变量i的,而是引用了它所在的环境(函数f)中的变量i。 c1跟c2引用…

    go开发, 技术干货 2021年10月18日
  • Go 可变参数 ... parameters 读这篇就够了

    Go 语言可变参数怎么用能最大化它的效用?本文对可变参数进行了详细介绍。 在实际开发中,总有一些函数的参数个数是在编码过程中无法确定的,比如我们最常用的 fmt.Printf 和 fmt.Println: 当你需要实现类似的接口时,就需要我们的可变参数出场了。 golang 的可变参数 可变参数就是一个占位符,你可以将 1 个或者多个参数赋值给这个占位符,这样不管实际参数的数量是多少,都能交给可变参数来处理,我们看一下可变参数的声明: 可变参数使用 name ...Type 的形式声明在函数的参…

    go开发, 技术干货 2021年9月18日
  • 深入浅出标准库 text/template 包

    go 语言标准库 text/template 在 web 编程项目中经常用到,本文详细介绍了这个包的用法。 官方定义: Package template implements data-driven templates for generating textual output. template 包是数据驱动的文本输出模板,其实就是在写好的模板中填充数据。 模板 什么是模板? 下面是一个简单的模板示例: {{ 和 }} 中间的句号 . 代表传入模板的数据,根据传入的数据不同渲染不同的内容。 .…

    go开发 2021年9月16日
  • 字节开源以Go为核心的项目,为何大厂都如此偏爱Go?

    9月8日,字节跳动正式宣布开源CloudWeGo,这是一套以Go 语言为核心中间件集合。字节相关技术负责人表示希望CloudWeGo能丰富云原生社区的Golang工具体系。 可以看出,字节内部已有诸多用Go语言开发的成熟项目,基本上也已经全员转Go了。其实不只是字节,阿里、腾讯、百度、B站等也都开始尝试用Go来开发项目了,如果你想进大厂,那么Go语言毫无疑问是最佳通行证。 为什么现在BAT大厂纷纷转Go? Go有十分明显的优势 许多大厂内部需要构建大型项目,而Go的高并发、高性能、高效率等优势,…

    go开发, 免费公开课 2021年9月11日
  • Go 项目中常见的 10 种错误

    本文总结了10种 go 语言编成中可能导致性能下降的坏实践。有代码洁癖的同学来自我检查吧! 这篇文章主要讲述了我在 Go 项目中见到过的常见错误清单,顺序无关。 未知的Enum值 来看个简单的例子 在上面的代码中,使用iota创建了一个enum类型,分别代指下面的状态信息: 现在,我们假设Status 是一个 JSON 请求中被Marshalled / Unmarshalled的一个属性,我们可以设计出下面的数据结构: 然后,假设收到的Request 的接口返回值为: 到目前为止,没有什么特殊的…

    go开发 2021年9月9日
历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、云原生、Go、Python开发专业人才培训机构!