life's a struggle.
Intelligence without ambition is a bird without wings.
2015-09-18
2015-09-18
包内的首字母大写为可导出符号,在其他包中使用
_ import *
表示导入该包,但不直接使用该包内的可导出符号(如使用go-sql-driver/mysql
)导入包时,go会自动执行包内的
init()
2015-09-18
2015-09-18
2015-09-18
2015-09-18
要点
- 从根本上说,反射只是一个机制,用来检查存储在接口内的类型和值,
所以在反射中,有2个类型分别对应(reflect.Type
,reflect.Value
),
分别由reflect.TypeOf(i interface{}) Type
和reflect
常用API
function
Indirect(v Value) Value
- 若
v
是nil pointer
,则返回zero value
- 若
v
是not nil pointer
,则返回其指向的值 - 若
v
不是指针,则返回其本身
有些接口同时支持指针值和非指针值,通过这个帮助函数,可以简化代码
可参考goriila/rpc
中,(m *serviceMap) register(rcvr interface{}, name string)
中,获取rcvr
的类型名- 若
reflect.Value
(v Value) Elem() Value
v
要求是interface
或pointer
,其他则panic
interface
则返回其动态类型值pointer
则返回指向的值若
v
是nil
,则返回零值
参考
2015-09-17
-
多语言
https://github.com/tomashanacek/mock-server
python
参考
2015-09-17
1 | var = 1 |
在pytho中函数中,python将var
处理成同名的局部变量!
所以,当执行复合赋值运算时,会报错!
1 | var = 1 |
解决
添加global
声明
1 | var = 1 |
参考
2015-09-16
作用
struct
中可以附加一个tag
,用来定制一些行为
如在encoding/json
中,因为go,默认首字母大写为导出的,而希望编码为json字符串时,
首字母为小写.
1 | type Person struct { |
注意
附加
omitempty
时,当值为null
时,不包含该字段附加
string
时,不管原类型,都转换为json string
附加
json:"-"
,不转换该字段
参考
2015-09-15
字段
创建型记录,需附带创建时间,便于分析统计
需要计算类的字段,默认值不要为
NULL
,否则会导致计算结果为0
尽量将字段设置为
NOT NULL
多占用额外存储空间
影响查询效率
标识符
- 标识符不使用常见的一些语言的关键字(如
class
,type
等)