写下,自己在用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)
}


今天就这样了,有时间再写