Tech Blog made for code

用Go语言创建一个简易的区块链

Go语言作为新一代的编程语言,其天生支持多线程高并发的特点使其能够充分发挥多核处理器的性能。 Go is an open source programming language that makes it easy to build simple, reliable, and efficient software. Go语言用来创造简单,可靠,高效的程序。因此Google在创立Go语言的初衷就给Go语言定义为:“简单快乐的开发高性能程序。” 随着以太坊和智能合约的兴起,大家开始关注比特币和以太币的底层 — 区块链技术。区块链本质上来说是一个公开的分布式数据库,每个使用它的人都有一个完整或部分的副本,但只有经过其他数据库管理员的同意,才能向区块中添加新的记录。每个区块存储的信... Read more

美西自驾游记

今年8月朋友来美国玩,就有了这次的美西自驾游。本文既是这段旅程的记录,也可以作为以后各位来玩的攻略。 行程 先大概说下行程,如上图所示,我们是从洛杉矶早上5点出发,先去了大峡谷,差不多3点左右到的,当天玩到日落能基本把大峡谷玩完。由于之前去过,而且朋友这次来的主要目的地是黄石公园,所以没有第二天再去大峡谷的计划。下一个目的地是羚羊彩穴和马蹄湾,我们由于人多,羚羊彩穴的page小镇订不到airbnb的房子,所以我们只能住在附近比较大的Flagstaff,第二天早上再赶到page。羚羊彩穴主要指Lower Antelope Canyon,由于整个tour必须有向导带路,所以提前预约Tour订好票会比较快。玩完 Page的两个景点就继续赶路到盐湖城,晚上在盐湖城住一晚后,第二天到... Read more

Go语言练习 - Web 爬虫

练习:Web 爬虫 在这个练习中,我们将会使用 Go 的并发特性来并行化一个 Web 爬虫。 修改 Crawl 函数来并行地抓取 URL,并且保证不重复。 提示:你可以用一个 map 来缓存已经获取的 URL,但是要注意 map 本身并不是并发安全的! 我们需要做的是修改Crawl函数,使函数能够并行的,且不重复地抓取页面。 本题作为教程最后的压轴练习,需要对go语言有较深刻的了解,并熟练地掌握前几章所学的内容。下面是我的解答代码 package main import ( "fmt" "sync" ) type Fetcher interface { // Fetch 返回 URL 的 body 内容,并且将在这个页面上找到的 URL 放到一个 slice 中... Read more

Go语言练习 - 二叉查找树

练习:等价二叉查找树 实现 Walk 函数。 测试 Walk 函数。 函数 tree.New(k) 用于构造一个随机结构的已排序二叉查找树,它保存了值 k, 2k, 3k, …, 10k。 创建一个新的信道 ch 并且对其进行步进: go Walk(tree.New(1), ch) 然后从信道中读取并打印 10 个值。应当是数字 1, 2, 3, …, 10。 用 Walk 实现 Same 函数来检测 t1 和 t2 是否存储了相同的值。 测试 Same 函数。 Same(tree.New(1), tree.New(1)) 应当返回 true,而 Same(tree.New(1), tr... Read more

Go语言练习 - Method(续)

练习:rot13Reader 编写一个实现了 io.Reader 并从另一个 io.Reader 中读取数据的 rot13Reader,通过应用 rot13 代换密码对数据流进行修改。 rot13Reader 类型已经提供。实现 Read 方法以满足 io.Reader。 rot13是一种弱加密方法,将26个英文字母中的前13个和后13个按顺序对换。 题目给出的代码为 package main import ( "io" "os" "strings" ) type rot13Reader struct { r io.Reader } func main() { s := strings.NewReader("Lbh penpxrq gur ... Read more