写在前面,昨天鸽了一天没有学习,是因为新入项目组分配了需求,有几点感受记录一下:
- 项目做的是python后台,本以为自己框架已经掌握的足够好,可是到了实战中一个api就把自己难的要死,实战还是检验实力的唯一标准。
- 纵观项目中代码,大多数是用Python27集成,相对于Python3,代码更加冗杂,格式不甚清晰,需要下手复写方能感受到期中逻辑与方法。
- 于框架中的逻辑错误,本以为框架设计好的同时是让人们按照框架的方法写程序获得更高的稳定性以及易用性,在纵观项目中则需要依据业务实际情况重写许多框架本身自己的方法已达到业务目标,所以文档这一关是要过的,只依赖视频很难讲到这么深,文档以及源码,这种技能要熟练掌握。
- 最后,呃。。。刚刚被警告了代码没有遵循规范,格式上面有许多错误,作为一个有那么点强迫症的人,突然发现这个习惯有时候挺好的。
以下是分割线:print('-' * 30)
下面开始今天的学习:
书接上回,上回学到了Map,类似于Python中的字典,不同的是Go的Map需要事先声明类型,并不能混装不同类型的数据,语法也相对固定许多。
课程抓包:
- Map的值可以是一个方法;
func TestMapFunValue(t *testing.T) {
m := map[int]func(op int) int {}
m[1] = func(op int) int { return op }
m[2] = func(op int) int { return op * op }
m[3] = func(op int) int { return op * op * op }
t.Log(m[1](2), m[2](2), m[3](2))
}
// 输出:2 4 8
- Go中并没有set数据类型,但是可以通过一些特殊方法实现集合功能;
// 说实话这段代码我也没有太理解,如果有一组数据需要变成集合,这段代码不知道行不行。
func TestMapForSet(t *testing.T) {
mySet := map[int]bool{}
mySet[1] = true
n := 3
if mySet[n] {
t.Logf("%d is existing", n)
}else{
t.Logf("%d is not existing", n)
}
mySet[3] = true
t.Log(len(mySet))
delete(mySet, 1)
n = 1
if mySet[n] {
t.Logf("%d is existing", n)
t.Logf("%d is not existing", n)
}
}
// 输出
// map_ext_test.go:21: 3 is not existing
// map_ext_test.go:24: 2
// map_ext_test.go:30: 1 is not existing
随手问题:
t.Log()输出与t.Logf()输出的区别:Log输出对象不用给予特别的符号,Logf格式化标志输出。
下划线:print("-" * 30)
String:
- String是一个数据类型,它的零值是一个空字符串而非0;
- String的byets数组可以存放任何数据;
- len(string)返回的是byres数,而非字符数;
- []rune(),类型可以把字符串的unicode值取出
编码方面:
conv.Itoa(Integer to ACSII) 相反亦然
需要复习内容rune,转编码的方式。
字符串的操作方法,类似于Python
func TestStringFn(t *testing.T) {
s := "A,B,C"
parts := strings.Split(s, ",")
for _, part := range parts {
t.Log(part)
}
t.Log(strings.Join(parts, "-"))
}
func TestConv(t *testing.T) {
s := strconv.Itoa(10)
t.Log("str" + s)
if i, err := strconv.Atoi("10"); err == nil {
t.Log(10 + i)
}
}
// 关于编码的一些实现
func TestString(t *testing.T) {
var s string
t.Log(s) //初始化为默认零值“”
s = "Hello"
t.Log(len(s))
s = "\xE4\xB8\xA5" //可以储存任何二进制数据
t.Log(s)
t.Log(len(s)) // len求出的是字符串中的byets数
s = "中"
t.Log(len(s))
c := []rune(s)
t.Log(len(c))
t.Logf("中 unicode %x", c[0])
t.Logf("中 UTF8 %x", s)
}
func TestStringToRune(t *testing.T) {
s := "彩虹六号:围攻"
for _, c := range s {
t.Logf("%[1]c %[1]d", c)
}
}