Golang
疯疯癫癫
这个作者很懒,什么都没留下…
展开
-
go import
go import注意:当写自己包的时候,要使用短小的不含有 _ (下划线) 的小写单词来为文件命名 。原创 2016-08-03 18:32:19 · 877 阅读 · 0 评论 -
go 设计模式(一)单例模式
go 的单例模式写法比较简单,可以通过sync.Once来辅助。type Singleton struct { name string}var ( once sync.Once instance *Singleton)func New() *Singleton { once.Do(func() { // once.Do 调用的函数只执行 1 次...原创 2018-09-27 11:16:35 · 621 阅读 · 0 评论 -
TCMalloc
文章目录问题简介小对象分配划分管理分配大对象分配划分分配Span释放参考内存分配的重要因素:速度。不同 malloc 分配速度对比:malloc耗时减少锁争用空间效率ptmalloc2300 ns线程 arena每个对象 4Bytes 头,大小四舍五入为 8 的倍数TCMalloc50 ns1. 小对象几乎没有争用 2. 大对象使用细粒度和高效的自旋锁...原创 2018-10-02 18:31:30 · 1004 阅读 · 0 评论 -
Golang 通过方法名调用方法
有这样一个结构体 Person,带有4个方法。现在有个需求,想通过方法的名字调用对应的方法,想到的办法是将名字和对应方法建立 map 关系。type Person struct { nape string age int}func (p *Person) SetName(nape string) { p.nape = nape }func (p *Person) GetName(...原创 2018-09-20 20:14:41 · 7358 阅读 · 1 评论 -
Golang 通过 cgo 调用 C/C++ 静态库(二)
书接上回C 调用 C++ 类Golang 通过 cgo 调用 C/C++ 静态库(一)如果想使用 golang 调用 C++ 代码该如何做?我们知道,golang 无法直接调用 C++,但是可以调用 C,所以我们需要用 C 包装下 C++ 代码。还是 C 调用 C++ 类 中 Person 的例子,我们现在要将 person.cpp 的类生成静态库供 golang 调用。我们首...原创 2018-09-17 19:59:38 · 5781 阅读 · 2 评论 -
Golang 通过 cgo 调用 C/C++ 静态库(一)
hello.h#ifndef HELLO_H_#define HELLO_H_#ifdef __cplusplusextern "C" {#endifextern int hello(char *name, int age);#ifdef __cplusplus}#endif#endif // HELLO_H_hello.c#include <stdio.h...原创 2018-09-17 19:21:08 · 14802 阅读 · 6 评论 -
Golang 闭包
为了加速数据处理,往往我们会选择goroutines并行处理。values := []string{"c++", "golang", "python"}for _, val := range values { go func() { fmt.Println(val) }()}执行的结果是pythonpythonpython和预期不符,为什么?...原创 2018-09-06 11:51:13 · 205 阅读 · 0 评论 -
vim 提示 PANIC PANIC PANIC
写 go 程序的时候,突然发现自动提示时显示PANIC PANIC PANIC。起初以为是YouCompleteMe出了问题,检查了下排除这种可能。最后网上搜索发现是gocode的问题。解决方法如下:gocode close && go get -u github.com/nsf/gocode...原创 2018-09-09 00:03:08 · 577 阅读 · 0 评论 -
Golang http 开启 gzip
一. 测试代码1.1. http 开启 gzip 数据大小对比1.2. http 开启 gzip benchmark 对比参考一. 测试代码package gzipimport ( "compress/gzip" "fmt" "io/ioutil" "log" "net/http")func RequestGzip...原创 2018-08-27 08:25:37 · 8581 阅读 · 0 评论 -
Golang 通过代码执行命令
有时需要通过代码执行一些系统命令来获取信息,golang 提供exec.Command来实现这一目的。shtest.gopackage mainimport ( "fmt" "os/exec" "strings")func exeSysCommand(cmdStr string) string { cmd := exec.Command("sh",...原创 2018-04-24 20:27:42 · 7413 阅读 · 0 评论 -
Golang panic 打印堆栈信息
一. 缘起程序进程后台运行monitor 监控程序负责拉起程序当因为逻辑问题导致后台进程挂掉时,不容易发现程序曾经挂过。golang 可以通过 recover 捕获 error,并将 panic 时的堆栈打印到日志来定位问题。$ tree panictestpanictest├── main.go└── panic └── panic.go二. 代码...原创 2018-04-24 00:55:05 · 16816 阅读 · 0 评论 -
Golang 序列化方式及对比
Golang 序列化的方式:BinaryGobJSONProtobuf一. Binary// OKtype Message struct { Id uint64 Size uint64}// Wrong/*type Message struct { Id int Size int Data string}*/...原创 2018-04-18 14:02:24 · 16644 阅读 · 3 评论 -
go 接口
Go 语言不是一种 “传统” 的面向对象编程语言:它里面没有类和继承的概念。但是 Go 语言里有非常灵活的接口概念,通过它可以实现很多面向对象的特性。接口定义了一个方法的集合,但是这些方法不包含实现代码,它们是抽象的,接口里也不能包含变量。原创 2016-08-05 12:21:33 · 1340 阅读 · 0 评论 -
go 结构体
Go 通过结构体的形式支持用户自定义类型。结构体是复合类型(composite types),当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在一起。然后可以访问这些数据,就好像它是一个独立实体的一部分。原创 2016-08-04 10:19:24 · 2711 阅读 · 0 评论 -
go 单元测试
go 单元测试go 单元测试概述实例参考文献概述go 提供了自动测试的包 testing,假设我们有一个文件youfile.go,那么建立测试文件的名字为 yourfile_test.go,这个文件中有测试函数,形式如下:func TestXxx(*testing.T)其中 TestXxx 中 Xxx 的第一个字母 X 必须是大写字母。将你的源文件 yourfile.go 和 yourfile原创 2016-07-31 20:07:43 · 1433 阅读 · 0 评论 -
减少 golang 二进制文件大小
文章目录一. Go VS C 二进制ELF二. 如何减小 go 二进制文件大小2.1. -ldflags2.2. UPX参考环境:$ go versiongo version go1.11.2 linux/amd64$ gcc --versiongcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609一. Go VS C 二进制hel...原创 2018-11-28 12:08:34 · 6191 阅读 · 4 评论