最新 | 最热门 | 最高评价

+0  Go Reflect 性能

Tag: Go
鸟窝 发于 2019年02月01日 16:30 | 点击: 1209 | 展开摘要
Go reflect包提供了运行时获取对象的类型和值的能力,它可以帮助我们实现代码的抽象和简化,实现动态的数据获取和方法调用, 提高开发效率和可读性, 也弥补Go在缺乏泛型的情况下对数据的统一处理能力。

通过reflect,我们可以实现获取对象类型、对象字段、对象方法的能力,获取struct的tag信息,动态创建对象,对象是否实现特定的接口,对象的转换、对象值的获取和设置、Select分支动态调用等功能, 看起来功能不错,但是大家也都知道一点: 使用reflect是有性能代

查看全文: http://www.udpwork.com/item/17370.html

+0  cacheline 对 Go 程序的影响

Tag: Go
鸟窝 发于 2019年01月24日 18:34 | 点击: 429 | 展开摘要
首先来了解一下来自维基百科上关于CPU缓存的介绍。

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

当处理器发出内存访问请求时,会先查看缓存内是否有请求数据。如果存在(命中),则不经访问内存直接返回该数据;如果不存在(失效),则要先把内存中的相应数据载入缓存,再将其返回处理器。
缓存之所以

查看全文: http://www.udpwork.com/item/17297.html

+0  使用 defer 还是不使用 defer?

Tag: Go
鸟窝 发于 2019年01月23日 17:47 | 点击: 737 | 展开摘要
对于Go语言的defer语句,或许你回经历一个 赞赏 --> 怀疑 --> 肯定 --> 再怀疑的一个过程,本文带你回顾一下defer的故事,以及如何在代码中使用defer语句。

最初的故事

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

查看全文: http://www.udpwork.com/item/17296.html

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

鸟窝 发于 2019年01月11日 11:43 | 点击: 615 | 展开摘要
各种数据库的连接字符串的连接格式(一般叫做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&...¶mN=valueN]

// user@unix(/path/to/socket)

查看全文: http://www.udpwork.com/item/17282.html

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

Tag: Java
鸟窝 发于 2019年01月10日 11:09 | 点击: 861 | 展开摘要
依照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 '\u0000' (or 0) and a maximum v

查看全文: http://www.udpwork.com/item/17272.html

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

Tag: Go
鸟窝 发于 2018年12月29日 15:07 | 点击: 642 | 展开摘要
有多种方式可以获得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 sync.Mutex
done uint32
}

func (o *Once)

查看全文: http://www.udpwork.com/item/17255.html

+0  sync.mutex 源代码分析

鸟窝 发于 2018年12月20日 14:13 | 点击: 770 | 展开摘要
sync.Mutex是Go标准库中常用的一个排外锁。当一个 goroutine 获得了这个锁的拥有权后, 其它请求锁的 goroutine 就会阻塞在 Lock 方法的调用上,直到锁被释放。

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

初版的 Mutex

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2

查看全文: http://www.udpwork.com/item/17244.html

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

Tag: 区块链
鸟窝 发于 2018年11月29日 11:35 | 点击: 989 | 展开摘要
上一篇 搭建一个私有的EOS集群 搭建了一个单节点的私链,本文将继续介绍多节点的私链搭建。

启动keosd和创建钱包

1、启动keosd程序

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

1

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

2、创建钱包

1
2
3
4
5

[root@dbl14195 eos]# cleos --wallet-url http://127.0.0.1:8899 wallet c

查看全文: http://www.udpwork.com/item/17214.html

+0  [转] EOS 白皮书 第二版

Tag: 区块链
鸟窝 发于 2018年11月28日 18:18 | 点击: 422 | 展开摘要
EOS白皮书官方文档: EOS.IO Technical White Paper v2,

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

EOS.IO 技术白皮书 v2

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

摘要: EOS.IO 软件采用了一种全新设计的区块链架构,实现了去中

查看全文: http://www.udpwork.com/item/17218.html

+0  搭建一个私有的EOS集群

Tag: 区块链
鸟窝 发于 2018年11月23日 16:48 | 点击: 825 | 展开摘要
EOS (Enterprise Operation System)是由 Block.one公司主导开发的一种全新的基于区块链智能合约平台,由区块链奇才 BM (Daniel Larimer)领导开发。旨在为高性能分布式应用提供底层区块链平台服务。EOS 项目的目标是实现一个类似操作系统的支撑分布式应用程序的区块链架构。该架构可以提供账户,身份认证,数据库,异步通信以及可在数以万计的 CPU/GPU群集上进行程序调度和并行运算。EOS最终可以支持每秒执行数百万个交易,同时普通用

查看全文: http://www.udpwork.com/item/17213.html

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

Tag: 工具
鸟窝 发于 2018年11月13日 19:40 | 点击: 466 | 展开摘要
最近在做Docker镜像的时候发现镜像文件非常大,需要找出程序的依赖库,减少程序的大小,所以整理了一下相关的工具。基本上这些工具都在GNU Binutils中。

GNU Binary Utilities或binutils是一整套的编程语言工具程序,用来处理许多格式的目标文件。当前的版本原本由在Cygnus Solutions的程序员以Binary File Descriptor library(libbfd)所撰写。这个工具程序通常搭配GCC、make、和GDB这些程序来使

查看全文: http://www.udpwork.com/item/17054.html

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

Tag: Go
鸟窝 发于 2018年11月03日 17:11 | 点击: 460 | 展开摘要
有时候在Go的函数调用的过程中,我们需要知道函数被谁调用,比如打印日志信息等。例如下面的函数,我们希望在日志中打印出调用者的名字。

1
2
3
4
5
6
7
8

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

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

首先打印函数本身的名称

最简单的方式就是硬编码。 因为在编译之前,我们肯定知道打印的时候所在哪个函数,但是更好的方式是编写一个通用的函数,

查看全文: http://www.udpwork.com/item/17182.html
|<<<1234567>>>| 一共26页, 302条记录