越努力 越幸运

Go 语言 reflect 包使用记录

在 Go 语言中 reflect 包有两个数据类型是必须要知道的:

  • Type:定义的类型的数据类型
  • Value:定义的类型的值的类型

更多更全的信息和使用说明请见官网文档

Go 语言 http 包使用记录

1. 基础概念

在 Go 语言中,编写一个 http web 服务器有两种方法:

  • 使用 net 包的 net.Listen 来对端口进行监听;
  • 使用 net/http 包的 ListenAndServve 来对端口进行监听,事实上,该包是基于 net 包进行封装的,即底层仍是 net 包相关的知识。

所以,使用 net/http 会更方便快捷,减少了很多不必要的封装和处理。

小心使用 STL 的 erase 函数

1. 基础概念

在 STL 中,容器按照存储方式分为两大类:

  • 以数组形式存储的序列容器,如vector、deque等;
  • 以非连续的节点形式存储的关联容器,如list、set、map等

对于不同类型的容器,在使用 erase 方法来进行元素删除时,需要格外小心,针对 map 的使用注意,请见map 迭代器实效问题

搭建 sonar 记录

1. 必要准备

操作系统为:Mac OS

版本为:sonarqube-6.0

在安装 sonar 前需要安装一些其必要的基础工具:

java
ruby
database: mysql, Oracle, etc.
gem

必须准备的是 java 环境,因为 sonar 是用 Java 编写的;数据库支持多种,本文使用 MySQL 作为示例;而 rubygem 并不是必须要的,如果在安装、运行过程中,根据日志记录,或许需要安装它们以解决错误问题。

常见 C 语言宏使用记录

1. 使用宏防止头文件被重复包含

#ifndef COMMON_DEFINE_H
#define COMMON_DEFINE_H
// 头文件相关内容
#endif

2. 使用宏来注释代码

#if 0
// 被注释的代码段,可以包含 //、/**/ 这样的注释代码
#endif

3. 使用小括号防止宏错误

#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))

4. 字符、字符串转换

  • 使用 ## 连接两个字符串
  • 使用 # 转换为字符串(加双引号)
  • 使用 #@ 转换为字符(加单引号)

示例代码: