写下,自己在用golang开发中,用到的东西,有啥写啥。
今个就写下golang中的控制语句 if else、for、switch、goto,这几个方面。
if 判断对比
package main import "fmt" func main(){ fmt.Printf("hello world\n") if a:=5;a>2 { fmt.Printf("a >2") }else { fmt.Printf("a<2") } }
for 循环
这里可以直接赋值
for i, j := 1, 10; i < j; i,j=i+1,j+1 { //死循环 fmt.Println(i) }
完整的例子
package main import "fmt" func main(){ fmt.Printf("hello world\n") if a:=5;a>2 { fmt.Printf("a >2") }else { fmt.Printf("a<2") } stra:="111" for i:=0; i< len(stra); i++ { fmt.Println(i) } }
如果想实现死循环,很简单,直接
for{ go rui() }
这里在看看switch的用法,学过语言的人都知道的。
package main import "fmt" func main(){ fmt.Printf("hello world\n") if a:=5;a>2 { fmt.Printf("a >2") } else { fmt.Printf("a<2") } stra:="111" for i:=0; i< len(stra); i++ { fmt.Println(i) } //这里是switch ch:="unix" var cl string switch ch { case "mac": cl = "mac" case "linux": cl = "linux" case "unix": cl= "unix" } fmt.Println(cl) }
对于判断是可以写更复杂的
用if实现:
kk := 0 bb := 9 if 0 <= kk && bb <= 9 { fmt.Println("zhenghao") }
用switch实现
oo := 11 switch { case 0<3 && oo <= 9: fmt.Println("and") case (1 <= 0 && 2 <= 2) || ('A' <= 'A' && 'Z' <= 'Z'): fmt.Println("fei") default: cl = "Other Char" }
还有一个goto,是个在自定义标签中跳转用的
func good(){ i := 0 xiaorui: //同其它语言也是以冒号结束作为标签 println(i) i++ goto xiaorui //跳转到xiaorui去 }
数组其实用的不多,这里就一笔带过,貌似更多的人在用切片slices
var a [5]int fmt.Println("emp:", a) a[4] = 100 fmt.Println("set:", a) fmt.Println("get:", a[4]) fmt.Println("len:", len(a))
slice是一个指针而不是值。
slice就是“动态的数组”,传值的时候他也是拷贝赋值,只是他拷贝的是内存地址,是传递指针的。slice总是指向一个底层的array,slice声明也像array一样,只是不需要长度。
切片中有两个概念:一是len长度,二是cap容量,长度是指已经被赋过值的最大下标+1,可通过内置函数len()获得。容量是指切片目前可容纳的最多元素个数,可通过内置函数cap()获得。切片是引用类型,因此在当传递切片时将引用同一指针,修改值将会影响其他的对象。
a := []int{1, 2, 3, 4, 5} s1 := a[2:5] s2 := a[1:3] fmt.Println(s1, s2) s2 = append(s2, 1, 2, 2, 3, 3, 4, 5) s1[0] = 9 fmt.Println(s1, s2) s2 = append(s2,11,22,33) fmt.Println(s2) aa := []string{"aa","bb","xiaorui.cc"} aa = append(aa,"this is rfyiamcool.blog.51cto.com") fmt.Println(aa)
map结构也经常常用,它和python中的dict 几乎一模一样,是一个key-value的hash结构。key可以是除了func类型,array,slice,map类型之外的类型。
它的使用也是非常简单
m:=map[string]string{}
m["key1"] = "val1"
map结构和slice是一样的,是一个指针。赋值的时候是将指针复制给新的变量
map的增删改查操作是这样的:
package main import( "fmt" ) func main() { m := map[string]string{"key1":"val1"} fmt.Println(m) m["key2"] = "val2" fmt.Println(m) p := m["key1"] fmt.Println(p) delete(m, "key1") fmt.Println(m) }
今天就这样了,有时间再写