//一个 C++ 转 GO 的程序员的自白.
GO :
//一个文件下载过滤需求;
var file_been_found_lock sync.Mutex
var file_been_found map[string]int = make(map[string]int)
func DownloadFileTreeBat(rtree *deep_tree, wg *sync.WaitGroup) {
is_need_download := false
url := rtree.url_for_down
file_been_found_lock.Lock()
cnt, has_ok := file_been_found[url]
if !has_ok {
file_been_found[url] = 1
is_need_download = true
}
file_been_found_lock.Unlock()
if is_need_download {
download(url)
}
}
}
//一个ID 生成器需求.
var file_been_found_lock sync.Mutex
var file_id_generator int = 0
func IDGenerator() int{
file_been_found_lock.Lock()
file_id_generator++;
file_been_found_lock.Unlock()
return file_id_generator
}
//N个生成器需求
//..........
//...........
//............
//.............
//啊, 好痛;
C/C++
void DownloadFileTreeBat(std::string url)
{
static stdMap map;
static std::mutex lk;
bool is_need_download = false;
lk.lock();
if(!map.container(url) {
is_need_download = true;
map[url] = 1;
}
lk.unlock();
if(is_need_download) {
download(url)
}
}
int IDGenerator() {
static int file_id_generator;
static std::mutex lk;
lk.lock();
file_id_generator++;
lk.unlock()
return file_id_generator;
}
//N个生成器需求
template <typename INT>
INT makeID()
{
static INT file_id_generator;
static std::mutex lk;
lk.lock();
file_id_generator++;
lk.unlock()
return file_id_generator;
}
//啊, 我很快乐,
//其实用了 C++ 这么多年, 积累了很多自有库, 用着也挺顺手的.