使用
git-flow
开发文档化升级步骤
每个新版本开发时,用升级文档记录下,涉及到的数据库更新,配置文件更新,部署环境更新等操作
life's a struggle.
Intelligence without ambition is a bird without wings.
2015-09-24
2015-09-24
要点
error
是一个预定义的interface
1
2
3type error interface {
Error() string
}最常用的一个实现是
errors
中的errorString
1
errors.New("error message")
在
fmt
包中,通过反射得知是error
类型时,则调用error() string
方法在
fmt
包中,提供了Errorf(format string, a ...interface{}) error
来方便错误信息输出在精细化的情况下(调用者需要知道错误(该错误是重新定义的的,包含其他信息)的详细信息,不只是错误字符串),
这时可以通过类型断言来单独处理指定错误1
2
3
4
5
6
7if err := dec.Decode(&val); err != nil {
if serr, ok := err.(*json.SyntaxError); ok {
line, col := findLine(f, serr.Offset)
return fmt.Errorf("%s:%d:%d: %v", f.Name(), line, col, err)
}
return err
}1
2
3
4
5
6
7
8
9
10
_, err := my.DB.Exec(sql)
if err != nil {
if driverErr, ok := err.(*mysql.MySQLError); ok { // Now the error number is accessible directly
if driverErr.Number == 1062 {
return errDuplicate
}
}
return &json2.Error{Code: 100, Message: "a"}
}
参考
2015-09-23
阅读此文
2015-09-23
字符串分割
func SplitAfter(s, sep string) []string
2015-09-23
2015-09-23
2015-09-23
正则文法
ImportDecl = "import" ( ImportSpec | "(" { ImportSpec ";" } ")" ) .
ImportSpec = [ "." | PackageName ] ImportPath .
ImportPath = string_lit .
导入路径(ImportPath)
- 相对路径
1 | import "./test" |
- 绝对路径(
gopath
)
1 | import "fmt" |
包名(PackageName)
.
1 | import . "fmt" |
这样导入后,在使用的时候无须包名
_
1 | import _ "github.com/go-sql-driver/mysql" |
不直接使用该包内的导出标识符
别名
1 | import f "fmt" |
通过别名访问(“f.Println”)
- 默认形式
1 | import "fmt" |
参考
2015-09-22
部署目录结构
部署目录 := 起始目录/项目名称/版本号/构建类型
构建类型 := 开发 | 测试 | 生产
开发 := debug
测试 := test
生产 := release
cmake
1 | ${PROJECT_NAME}/${PROJECT_VERSION}/${CMAKE_BUILD_TYPE} |
cmake
2015-09-22
对比
| 对比点 | 文件 | 数据库 |
|——————–+———————-+———-|
| 程序实现 | 简单 | 相对复杂 |
| 数据读写操作 | 简单 | 相对复杂 |
| 是否利于版本回退 | 是(可以纳入版本控制) | 否 |
| 部署是否方便 | 是 | 否 |
| 是否方便集中式管理 | 否 | 是 |
结论
综合考虑,优先使用配置文件方式
参考
2015-09-21
https://github.com/gorilla/sessions
http session实现