可以在变量前加入"&",符号,这样就会变成该变量的内存地址 使用"*",可以接受内存地址,详细代码如下: func main(){ fmt.Println(&name) namesty(&name) print(name) } ``` Go func namesty(name *string) { //使用指针用内存地址更换变量名称 *name="code" } ``` 使用*接受了内存地址之后就可以从内存地址改变这个变量,于是下面的print输出语句可以发现name的值变成了code。 ---------- switch可以使用case判断值,当值没有赋予时可以编程一个表达式,如: ``` go a:=10 switch { case a>5: println("他是真的哦") break default: println("sdgdg") } ``` 当switch 变成了switch a是,就只能判断数字了,因为类型冲突了 ---------- 控制流的代码时没有(),包括循环的,if都只能写成 ``` go if name!="you names"{ println(name) } ``` 的形式,所幸的是有大括号且大括号不可以换行 ---------- 循环: ``` go for i:=1;i<=10;i++{ fmt.Println(i) } ``` 可以发现还是没有()的符号,而且当你想要死循环的时候可以 ``` go for{ } ``` 跳出当然还是用break ---------- defer延迟函数,只有当剩下的全部执行完时才会执行包括了defer的哪一行语句 而且你会发现一个情况,当有两个defer函数时,他会下执行最下面然后再执行上面一边,也就意味着当有defer函数时,自动将defer写进了最后面,而defer后面一行的defer时比上面的defer先执行的。 defer会直接将他后面的代码写进他的前面!!! ``` go for i:=1;i<=10;i++{ defer fmt.Println(-i) defer fmt.Println(&i) fmt.Println(i) } ``` ---------- panic强制停止当前的控制流!!! ``` go if i>5{ panic("namesdgdfgdfg") } ``` 会中断当前函数的执行,倘若有defer任然会正常执行defer的代码。 ---------- recover函数可以强制获取当前的控制权,但是当没有问题时recover只会返回nil ---------- go的映射是一个哈希表,使用map关键字 例如: ``` go stet:=map[string]int{ "name":10, "code":15, } fmt.Println(stet) ``` 可以发现他利用map关键字定义了一给类型为string的键值,而后使用int表示他对应的值时int形式。 还可以使用stet["names"]=10来增加 stet["name"],用来获取到name为主键后面的值 还可以使用delete(stet,"code")来删除掉stet映射的code键值。 ---------- 结构 ``` go type namest struct { name string code string a int } ``` 当你向namest变量类型赋值3时, ``` go emb:=namest{"12","sdf",10} ``` 获取的话则是 ``` go fmt.Println(emb.name) ``` 你可以把它看做一个接口类。 也可以嵌入元素。 ``` go type namests7 struct { namest mid int } ``` Loading... 可以在变量前加入"&",符号,这样就会变成该变量的内存地址 使用"*",可以接受内存地址,详细代码如下: func main(){ fmt.Println(&name) namesty(&name) print(name) } ``` Go func namesty(name *string) { //使用指针用内存地址更换变量名称 *name="code" } ``` 使用*接受了内存地址之后就可以从内存地址改变这个变量,于是下面的print输出语句可以发现name的值变成了code。 ---------- switch可以使用case判断值,当值没有赋予时可以编程一个表达式,如: ``` go a:=10 switch { case a>5: println("他是真的哦") break default: println("sdgdg") } ``` 当switch 变成了switch a是,就只能判断数字了,因为类型冲突了 ---------- 控制流的代码时没有(),包括循环的,if都只能写成 ``` go if name!="you names"{ println(name) } ``` 的形式,所幸的是有大括号且大括号不可以换行 ---------- 循环: ``` go for i:=1;i<=10;i++{ fmt.Println(i) } ``` 可以发现还是没有()的符号,而且当你想要死循环的时候可以 ``` go for{ } ``` 跳出当然还是用break ---------- defer延迟函数,只有当剩下的全部执行完时才会执行包括了defer的哪一行语句 而且你会发现一个情况,当有两个defer函数时,他会下执行最下面然后再执行上面一边,也就意味着当有defer函数时,自动将defer写进了最后面,而defer后面一行的defer时比上面的defer先执行的。 defer会直接将他后面的代码写进他的前面!!! ``` go for i:=1;i<=10;i++{ defer fmt.Println(-i) defer fmt.Println(&i) fmt.Println(i) } ``` ---------- panic强制停止当前的控制流!!! ``` go if i>5{ panic("namesdgdfgdfg") } ``` 会中断当前函数的执行,倘若有defer任然会正常执行defer的代码。 ---------- recover函数可以强制获取当前的控制权,但是当没有问题时recover只会返回nil ---------- go的映射是一个哈希表,使用map关键字 例如: ``` go stet:=map[string]int{ "name":10, "code":15, } fmt.Println(stet) ``` 可以发现他利用map关键字定义了一给类型为string的键值,而后使用int表示他对应的值时int形式。 还可以使用stet["names"]=10来增加 stet["name"],用来获取到name为主键后面的值 还可以使用delete(stet,"code")来删除掉stet映射的code键值。 ---------- 结构 ``` go type namest struct { name string code string a int } ``` 当你向namest变量类型赋值3时, ``` go emb:=namest{"12","sdf",10} ``` 获取的话则是 ``` go fmt.Println(emb.name) ``` 你可以把它看做一个接口类。 也可以嵌入元素。 ``` go type namests7 struct { namest mid int } ``` 最后修改:2021 年 08 月 25 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏