这是我参与「第五届青训营 」笔记创作活动的第1天。主要记录了自己在学习期间比较在意的知识点。与其他语言较为类似的知识点并未写入。
整体结构: 文件开头要写package,声明这个文件属于哪个包,package为main说明这个文件是main包的一部分,这是程序的入口文件;import()导入要用的包,如fmt、time、strings等;接下来可以进行struct定义结构体、func定义函数等操作。
变量声明:
1.var name = value 2.var name type = value 3.name := value
常量声明: 把var改成const即可,常量没有确定的类型,根据使用的上下文自动确定类型。 数组: 声明:var name [length]type
切片: make()创建切片:s := make([]string,3), append(s,"a")追加值,函数返回结果为修改后的切片,需要赋值回去,如s = append(s,"a") 。copy(c,s)可将s拷贝到c。 s[i:j]取s中第i个位置到第j-1个位置的元素
map: m := make(map[string]int)、 m := map[string]int{"one":1,"two":2} 。从map中取值:a,ok := s["one"] ok为是否存在该键值对,a为取出来的value map遍历是无序的 range可以用来遍历数组、map: for k,v := range s (不需要某个值可以用下划线代替,将其忽略)
函数:
func name(a type,b type)
type func name(a type,b type) (type,type) //可以返回多个值
结构体方法: type user struct { name string password string }、 func (u *user) name(password string){ u.password = password } 、func main(){ u := user{"aaaa","aaaa"} a.name("bbbb") }
字符串操作: 需要import ("strings") ;方法: contains(a string,b string) //判断a中是否包含b count(a string,b string) //字符串计数 index(a string, b string) //字符串位置 join(s []string,a string) //连接多个字符串 len(a string) //字符串长度
json处理: 需要import("encoding/json") 结构体里的变量名首字母是大写,就可以用json.Marshal(string)序列化,变成一个byte数组,byte数组可以用强制类型转换转成string 序列化后的字符串也可以用json.Unmarshal(a string,&b)反序列化到变量里。 可以在结构体声明里的变量后加' json:"name" ' ,这样经过序列化再输出的字符串里该字段的名字就会变成name。
实践例子中出现的问题:
在运行第一个例子时出现了strconv.Atoi: parsing "99\r": invalid syntax,原因是因为输出为99\r\n,
reader.ReadString('\n')
以\n截止,strings.TrimSuffix(input,"\n")只去掉了\n,导致字符串残留了一个\r,使其无法转换成int,改成strings.TrimSuffix(input,"\r\n")即可。