分享发现的一些小经验和小坑

R.T. 大家如果有发现类似的或不同的问题或坑欢迎回复继续本话题,给新手一些经验和鼓励。非常感谢!

1、json包的编码和解码方法函数如果使用map[string]interface{}作为参数,则只能用string类型为Key的map。

2、os.exit(1)执行后,defer是没有作用的。

3、crontab中的%必须在前面加上\进行转义。例如:\%Y\%m\%d。

4、defer中的东西如果需要修改后传回去,尽量使用指针。 例如:

a := getArray()
defer setArray(a)
此时a尽量使用指针。
或者使用以下方法:
a := getArray()
defer setArray(&a)

5、strings.Split("", ";")。如果源字符串是空的,那么结果的长度依然会是1,要警惕。

6、append的时候,假设b := append(a[:1], a[2:]),即使这样,a的数组也发生了改变。

如果使用b := append(a[:1:1], a[2:]),a的数组就不会改变。

7、从slice中用for循环加append方法删除多个元素时,切记要从后往前删除。

共 4 个回复


rn2dy

Number 6 should be b := append(a[:1], a[2:]...) the reason a has changed is because a[:1] is a slice which has capacity that equal to len(a) - len(a[:1]). However, because len(a[:1:1]) is same as len(a[0:1:1]) meaning the capacity of a[0:1:1] is 1 - 0 = 1, thats why appending to this will yield a completely new slice (because there is no more room, so a new one has to be created).

# 0

lzy7199

Thank you!欢迎大家回复更多的想法。

# 1

doomsplayer

第一点,json不仅仅支持map,还支持struct

# 2

lzy7199

修改了,感谢

# 3