Intelligence without ambition is a bird without wings.

2015-09-18
go-redis

阅读此文

2015-09-18
go-package

  • 包内的首字母大写为可导出符号,在其他包中使用

  • _ import *表示导入该包,但不直接使用该包内的可导出符号(如使用go-sql-driver/mysql)

  • 导入包时,go会自动执行包内的init()

阅读此文

2015-09-18
go-mysql

阅读此文

2015-09-18
vim-tab

相关选项

  • tabstop 一个tab在显示时对应多少空格,默认为8
阅读此文

2015-09-18
vim-modeline

nginx

1
# vim: syntax=nginx ts=4 sw=4 sts=4 sr et

apache

1
# vim: syntax=apache ts=4 sw=4 sts=4 sr et
阅读此文

2015-09-18
go-reflect

要点

  • 从根本上说,反射只是一个机制,用来检查存储在接口内的类型和值,
    所以在反射中,有2个类型分别对应(reflect.Type, reflect.Value),
    分别由reflect.TypeOf(i interface{}) Typereflect

常用API

function

  • Indirect(v Value) Value

    • vnil pointer,则返回zero value
    • vnot nil pointer,则返回其指向的值
    • v不是指针,则返回其本身

    有些接口同时支持指针值和非指针值,通过这个帮助函数,可以简化代码
    可参考goriila/rpc中,(m *serviceMap) register(rcvr interface{}, name string)中,获取rcvr的类型名

reflect.Value

  • (v Value) Elem() Value

    • v要求是interfacepointer,其他则panic

    • interface则返回其动态类型值

    • pointer则返回指向的值

    • vnil,则返回零值

参考

  1. http://blog.golang.org/laws-of-reflection
阅读此文

2015-09-17
mock-server

阅读此文

2015-09-17
python-global

1
2
3
4
5
6
7
8
9
10
11
12
13
var = 1

def fun():
var = 2
print(var)

def main():
fun()
print(var)

>>> main()
2
1

在pytho中函数中,python将var处理成同名的局部变量!

所以,当执行复合赋值运算时,会报错!

1
2
3
4
5
6
7
8
9
10
11
var = 1

def main():
var += 2
print(var)

>>> main()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in main
UnboundLocalError: local variable 'var' referenced before assignment

解决

添加global声明

1
2
3
4
5
6
7
8
9
var = 1

def main():
global var
var += 2
print(var)

>>> main()
3

参考

  1. http://stackoverflow.com/questions/10851906/python-3-unboundlocalerror-local-variable-referenced-before-assignment?lq=1
  2. python中在哪些情况下必须使用global来声明全局变量?
  3. http://stackoverflow.com/questions/8934772/assigning-to-variable-from-parent-function-local-variable-referenced-before-as
阅读此文

2015-09-16
go-struct-tag

作用

struct中可以附加一个tag,用来定制一些行为

如在encoding/json中,因为go,默认首字母大写为导出的,而希望编码为json字符串时,
首字母为小写.

1
2
3
4
5
type Person struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
MiddleName string `json:"middle_name,omitempty"`
}

注意

  • 附加omitempty时,当值为null时,不包含该字段

  • 附加string时,不管原类型,都转换为json string

  • 附加json:"-",不转换该字段

参考

  1. http://stackoverflow.com/questions/10858787/what-are-the-uses-for-tags-in-go
  2. http://golang.org/pkg/reflect/#StructTag
  3. https://groups.google.com/forum/#!topic/golang-china/jDyG0r_atxQ
  4. https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/07.2.md
阅读此文

2015-09-15
数据库设计

字段

  1. 创建型记录,需附带创建时间,便于分析统计

  2. 需要计算类的字段,默认值不要为NULL,否则会导致计算结果为0

  3. 尽量将字段设置为NOT NULL

    • 多占用额外存储空间

    • 影响查询效率

标识符

  • 标识符不使用常见的一些语言的关键字(如class, type等)
阅读此文