[返回] [最新] [最热门] [最高评价]

Go Reflect 性能

Go reflect包提供了运行时获取对象的类型和值的能力,它可以帮助我们实现代码的抽象和简化,实现动态的数据获取和方法调用, 提高开发效率和可读性, 也弥补Go在缺乏泛型的情况下对数据的统一处理能力。

通过reflect,我们可以实现获取对象类型、对象字段、对象方法的能力,获取struct的tag信息,动态创建对象,对象是否实现特定的接口,对象的转换、对象值的获取和设置、Select分支动态调
...

鸟窝 2019-02-01 16:30 | 查看: 1228

cacheline 对 Go 程序的影响

首先来了解一下来自维基百科上关于CPU缓存的介绍。

在计算机系统中,CPU高速缓存(英语:CPU Cache,在本文中简称缓存)是用于减少处理器访问内存所需平均时间的部件。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近处理器的频率。

当处理器发出内存访问请求时,会先查看缓存内是否有请求数据。如果存在(命中),则不经访问内存直接返回该数据;如果
...

鸟窝 2019-01-24 18:34 | 查看: 379

使用 defer 还是不使用 defer?

对于Go语言的defer语句,或许你回经历一个 赞赏 --> 怀疑 --> 肯定 --> 再怀疑的一个过程,本文带你回顾一下defer的故事,以及如何在代码中使用defer语句。

最初的故事

Go语言增加的 defer 语句在简化代码方面确实用处多多, 尤其是对资源的释放等场景,提供了简便的代码方法。其实其它语言也有类似的语法或者语法糖, 比如Java就有try-with-r
...

鸟窝 2019-01-23 17:47 | 查看: 685

Go 各种数据库连接字符串汇总

各种数据库的连接字符串的连接格式(一般叫做database source name, 简称DSN)是不同的,本文汇总了各个数据库驱动程序的字符串连接方式。

关系型数据库

MySQL

1
2
3
4
5
6
7
8
9
10
11
12
13

[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶m
...

鸟窝 2019-01-11 11:43 | 查看: 564

一个Java字符串中到底有多少个字符?

依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 \u0000 (0),最大值是\uffff(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个字符?

char: The char data type is a single 16-bit Unicode character. It has a minimum value of
...

鸟窝 2019-01-10 11:09 | 查看: 830

得到Go程序的汇编代码的方法

有多种方式可以获得Go程序的汇编代码, 尽管输出的格式有些不同,但是都是方便阅读的汇编代码,可以帮助我们更好的了解程序的底层运行方式。

我们看下面一段代码, 它是sync.Once的实现,去掉了不必要的注释,复制出来用来研究的一段小代码。

once.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

type Once struct {
m sy
...

鸟窝 2018-12-29 15:07 | 查看: 598

sync.mutex 源代码分析

sync.Mutex是Go标准库中常用的一个排外锁。当一个 goroutine 获得了这个锁的拥有权后, 其它请求锁的 goroutine 就会阻塞在 Lock 方法的调用上,直到锁被释放。

sync.Mutex的实现也是经过多次的演化,功能逐步加强,增加了公平的处理和饥饿机制。

初版的 Mutex

首先我们来看看Russ Cox在2008提交的第一版的Mutex实现。

1
2
3
4
5
...

鸟窝 2018-12-20 14:13 | 查看: 729

搭建一个私有的EOS集群 - 2

上一篇 搭建一个私有的EOS集群 搭建了一个单节点的私链,本文将继续介绍多节点的私链搭建。

启动keosd和创建钱包

1、启动keosd程序

keosd的配置文件可以参考上一篇文章。

1

keosd -d wallet/data --config-dir wallet/config &

2、创建钱包

1
2
3
4
5

[root@dbl14195 eos]# cleos --wa
...

鸟窝 2018-11-29 11:35 | 查看: 935

[转] EOS 白皮书 第二版

EOS白皮书官方文档: EOS.IO Technical White Paper v2,

中文翻译: EOS.IO 技术白皮书 v2, 由汪涛,minghua,鞠禹,李晓宇,轻灵紫,陈伟桢,赵余,以及另外两位不具名人士共同翻译,终稿由汪帆审校。

EOS.IO 技术白皮书 v2

本文档由汪涛,minghua,鞠禹,李晓宇,轻灵紫,陈伟桢,赵余,以及另外两位不具名人士共同翻译,终稿由汪帆审校,感
...

鸟窝 2018-11-28 18:18 | 查看: 366

搭建一个私有的EOS集群

EOS (Enterprise Operation System)是由 Block.one公司主导开发的一种全新的基于区块链智能合约平台,由区块链奇才 BM (Daniel Larimer)领导开发。旨在为高性能分布式应用提供底层区块链平台服务。EOS 项目的目标是实现一个类似操作系统的支撑分布式应用程序的区块链架构。该架构可以提供账户,身份认证,数据库,异步通信以及可在数以万计的 CPU/GPU
...

鸟窝 2018-11-23 16:48 | 查看: 766

ldd、objdump、nm、strings、strip等工具

最近在做Docker镜像的时候发现镜像文件非常大,需要找出程序的依赖库,减少程序的大小,所以整理了一下相关的工具。基本上这些工具都在GNU Binutils中。

GNU Binary Utilities或binutils是一整套的编程语言工具程序,用来处理许多格式的目标文件。当前的版本原本由在Cygnus Solutions的程序员以Binary File Descriptor library(
...

鸟窝 2018-11-13 19:40 | 查看: 405

如何在Go的函数中得到调用者函数名?

有时候在Go的函数调用的过程中,我们需要知道函数被谁调用,比如打印日志信息等。例如下面的函数,我们希望在日志中打印出调用者的名字。

1
2
3
4
5
6
7
8

func Foo() {
fmt.Println("谁在调用我?")
bar()
}

func Bar() {
fmt.Println("谁又在调用我?")
}

首先打印函数本身的名称

最简单的方式就是硬编码。 因为在编
...

鸟窝 2018-11-03 17:11 | 查看: 402

...更多...