本文共 2809 字,大约阅读时间需要 9 分钟。
写下,自己在用golang开发中,用到的东西,有啥写啥。
今个就写下golang中的控制语句 if else、for、switch、goto,这几个方面。
if 判断对比
1 2 3 4 5 6 7 8 9 10 11 | 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 循环
这里可以直接赋值
1 2 3 | for i, j := 1 , 10 ; i < j; i,j=i+ 1 ,j+ 1 { //死循环 fmt.Println(i) } |
完整的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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) } } |
如果想实现死循环,很简单,直接
1 2 3 | for { go rui() } |
这里在看看switch的用法,学过语言的人都知道的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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实现:
1 2 3 4 5 | kk := 0 bb := 9 if 0 <= kk && bb <= 9 { fmt.Println( "zhenghao" ) } |
用switch实现
1 2 3 4 5 6 7 8 9 | 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,是个在自定义标签中跳转用的
1 2 3 4 5 6 7 | func good(){ i := 0 xiaorui: //同其它语言也是以冒号结束作为标签 println(i) i++ goto xiaorui //跳转到xiaorui去 } |
数组其实用的不多,这里就一笔带过,貌似更多的人在用切片slices
1 2 3 4 5 6 | 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()获得。切片是引用类型,因此在当传递切片时将引用同一指针,修改值将会影响其他的对象。
1 2 3 4 5 6 7 8 9 10 11 12 | 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的增删改查操作是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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) } |
今天就这样了,有时间再写