背景 基于可以对interface{}赋值任何类型的变量,很多人会尝试如下的代码: dataSlice := []int{1,2,3} var interfaceSlice []interface{} = dataSlice 但是很不幸,这个段代码编译不过: cannot use dataSl...
Golang
Golang工厂模式自动注册
前言 相信接触过golang操作mysql的同学们都见过这样的代码: import "database/sql" import _ "github.com/go-sql-driver/mysql" 这是我们每个新手都可以google到的片段,我刚开始接触的时候觉得很奇怪,我们...
并发编程下利用原子操作实现递增id生成器
有时候我们在编写并发程序的时候需要产生一个递增的id分配给各不同的执行流,最简单的做法是用锁的方式来实现。但是似乎有更加简洁高效的做法,利用原子操作实现(其利用的是著名的compare and swap思想)。 废...
Golang接口值(interface)的比较操作分析
Golang的interface设计得相当巧妙,作为一名菜鸟,在学习的时候就遇到了一些疑问,比如关于interface类型值的逻辑比较(等于==,不等于!=)。在《Go语言圣经》第7章5小节中提到:两个接口值相等仅当它们都是nil值...
踩过的在Golang for-loop使用goroutine的坑
背景 在学习Golang的过程中,看到《Go语言圣经》中说到“在大多数程序中,一个WEB服务器就足够了”,然后我就想着那我就是想多个WEB服务器要怎么做呢,所以顺手写了下面的代码: package main import ( "fmt...
golang自定json序列化实现对非ASCII字符进行转义
问题 最近接手了一个Golang的项目,说实话,这个项目的坑点太多了,这里就不吐槽了。在改这个项目的一个bug时,发现导致这个bug的其中一个原因是Golang的json序列化与PHP的json序列化结果是不同的,这里举一个简...