First:工作总结
- django request.data.get与request.query_params.get——前者通过POST传参,后者则是通过url传参,POST请求两者都可用,GET请求只能用后者拿到数据
- value与value_list:value返回一个字典,value_list返回一个元祖结果集。
Second:Go语言学习
defer函数,用于方法执行后最后执行语句,类似于Python中的finally,在go中不仅用于异常处理,还用于程序最后的释放文件、释放锁等操作。
panic,中断程序并抖出异常,类似Python的raise,与defer搭配使用。
func Clear() {
fmt.Println("Clear resources.") // 定义一个函数
}
func TestDefer(t *testing.T) {
defer Clear() // 使用defer调用函数
fmt.Println("Start") // 打印一行文字
panic("error") // 使用panic抖出异常
// fmt.Println("End")
"""
返回结果必然是一个报错,因为有panic的存在,期中的区别在于"Start"输出会优先输出,因为defer的存在,Clear()方法仍会在报错前执行,但是由于"End"输出在panic之后,由于程序已经报错,故不会执行
"""
Third:Go语言中的面向对象
官方表述:既是又不完全是,首先一点就是Go语言并不支持继承。
实例前面加上”&“,会将实例类型变为指针类型
方法调用不同,实例调用出来的结果会产生一个新的内存或者说复制一份新值,而指针调用的结果则是原地址调用——new!
// 结构体定义
type Employee struct {
Id string
Name string
Age Int
}
// 创建实例及初始化
func TestCreateEmployeeObj(t *testing.T) {
e := Employee{"0", "Thermite", 20}
e1 := Employee{Name: "Ash", Age: 18}
e2 := new(Employee)
e2.Id = "3"
e2.Age = 30
e2.Name = "Thatchar"
t.Log(e)
t.Log(e1)
t.Log(e1.Id)
t.Log(e2)
t.Logf("e is %T", e)
t.Logf("e2 is %T", e2) // %T 为类型的占位符
}
"""
=== RUN TestCreateEmployeeObj
encap_test.go:18: {0 Thermite 20}
encap_test.go:19: { Ash 18}
encap_test.go:20:
encap_test.go:21: &{3 Thatchar 30}
encap_test.go:22: e is encap.Employee
encap_test.go:23: e2 is *encap.Employee
--- PASS: TestCreateEmployeeObj (0.00s)
"""