[Go] Go语言中遇到的一些坑:range map无序问题、os.OpenFile不会自动清空文件内容的问题

220 阅读1分钟

首先,放上 Golang标准库文档,写Go语言时可以放在手边,随时查阅。


range map无序的问题

首先是第一个问题,在go语言中,使用range遍历是很常见的操作,但对于map,用range遍历是无序的。如果想有序遍历map,需要用slice存储有序的key序列,然后根据key去查找map中的value。

os.OpenFile不会自动清空文件的问题

使用os.OpenFile时可以指定文件打开方式:

os.O_RDONLY     //只读
os.O_WRONLY     //只写
os.O_RDWR       //读写文件
os.O_APPEND     //追加文件
os.O_CREATE     //不存在时创建文件
os.O_TRUNC      //打开时清空文件

对于写文件,默认是覆盖文件进行写的,但不会默认清空。

这句话怎么理解呢?如果文件中原本就有数据“aabbcc”,然后你重新OpenFile,然后写入"bb",那么文件中的内容会变成“bbbbcc”。

这就是所谓的,默认覆盖写,但不会进行清空。如果需要覆盖写且清空文件,需要添加os.O_TRUNC

os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0777)

Reference