database-sql包源码剖析

连接与连接池 database/sql database/sql是golang的标准库之一,它提供了一系列接口方法,用于访问关系数据库。它并不会提供数据库特有的方法,

如何优雅控制goroutine

Goroutine Processes and Threads 操作系统会为该应用程序创建一个进程。作为一个应用程序,它像一个为所有资源而运行的容器。这些资源包括内存地址空间、文件句柄、设备和线程

Golang中的闭包

闭包 在函数编程中经常用到闭包,闭包是什么?它是怎么产生的及用来解决什么问题呢?先给出闭包的字面定义:闭包是由函数及其相关引用环境组合而成的实

Go实现HTTP长连接和短连接

TCP的长连接与短连接 Server和Client建立通讯后,确保连接的及时断开就非常重要。否则,多个客户端长时间占用着连接不关闭,是非常可怕

HTTP中的长连接与短连接

HTTP协议与TCP/IP协议的关系 HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题

Go中的可寻址详解

Go语言规范中规定了可寻址(addressable)对象的定义, For an operand x of type T, the address operation &x generates a pointer of type *T to x. The operand must be addressable, that is, either a variable, pointer indirection, or slice indexing operation; or a field

空结构体struct{}解析

空对象 空对象是个神奇的东西。它指的是没有字段的结构类型。 1 type Q struct{} 不占用空间,长度为0 1 2 var s struct{} fmt.Println(unsafe.Sizeof(s)) // prints 0 如果结构体中仅有一个空结构字段,那么结

如何优雅地关闭Go channel

几天前,我写了一篇文章来说明golang中channel的使用规范。在reddit和HN,那篇文章收到了很多赞同,但是我也收到了下面几个关于

Go中unsafe使用实践

指针类型 在正式介绍 unsafe 包之前,需要着重介绍 Go 语言中的指针类型。 举一个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 package main import "fmt" func double(x int) { x += x } func main() { var a = 3 double(a) fmt.Println(a)

Golang 超大文件读取的两个方案

问题 比如我们有一个log文件,运行了几年,有100G之大。按照我们之前的操作可能代码会这样写: 1 2 3 4 5 6 7 func ReadFile(filePath string) []byte{ content, err := ioutil.ReadFile(filePath) if err != nil { log.Println("Read error") }

Go中写文件的方式比较

ioutil.WriteFile 1 2 // 写入[]byte类型的data到filename文件中,文件权限为perm func WriteFile(filename string, data []byte, perm os.FileMode) error 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package main import

Go中读文件的方式比较

使用golang语言去读取一个文件默认会有多种方式,这里主要介绍以下几种。 ioutil.ReadFile 1 2 //读取文件内容,并返回[]byte数据和错误信息。err ==

开源Json库性能分析

开源Json库性能分析 Json 作为一种重要的数据格式,具有良好的可读性以及自描述性,广泛地应用在各种数据传输场景中。Go 语言里面原生支持了这种数据

如何运行exec.Command时输出详细错误信息

当运行下面的代码时: 1 2 3 4 5 6 7 8 9 cmd := exec.Command("find", "/", "-maxdepth", "1", "-exec", "wc", "-c", "{}", "\\") var out bytes.Buffer cmd.Stdout = &out err := cmd.Run() if err != nil { fmt.Println(err) return } fmt.Println("Result: " + out.String()) 我得到这个错误: 1 exit status 1 解决方案是使用

umask命令解析

umask命令用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执

linux端口连通性测试

telnet telnet是windows标准服务,可以直接用;如果是linux机器,需要安装telnet. 用法: telnet ip port 1)先用telnet连接不存在的