go学习笔记表达式

保留字

在程序中不可以使用的名字
break,deafault,func,interface,select,case,defer,go,map,struct,chan,else,goto,
package,switch,const,fallthrough,if,range,type,continue,for,import,return,var

运算符

+       &        +=       &=        &&       ==       !=       (       )
-       |        -=       |=        ||       <        <=       [       ]
*       ^        *=       ^=        <-       >        >=       {       }
/       <<       /=       <<=       ++       =        :=       ,       ;
%       >>       %=       >>=       --       !        ...      .       :
&^      &^=

简单位运算符

0110 &  1011 = 0010     //AND 都为1
0110 |  1011 = 1111     //OR 至少一个为1
0110 ^  1011 = 1101     //XOR 只能一个为1
0110 &^ 1011 = 0100     //AND NOT 清楚标志位 m &^ n 下面的数字是n的二进制是1值为0,二进制是0值为m中对应的值

标志位操作

a := 0
a |= 1 << 2             //<<左移运算符 比如:1<<2 则表示:1的二进制表示为:000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),那么像左移动两位则是000...000100
a |= 1 << 6             //a|=b表示的意思就是a=a|b(注意OR运算是需要先转换成二进制的)
a = a &^ (1 << 6)

不支持运算符重载

package main

import (
    "fmt"
)

func main() {
    n := 0
    p := &n
    //b := n++          //报错
    //if n++ == 1 {}    //报错
    //++n               //报错
    n++
    *p++

    fmt.Println(n, p)
}

没有’~’,取反运算也用’^’

package main

import (
    "fmt"
)

func main() {
    x := 1
    x = ^x

    fmt.Println(x)
}

初始化符合对象,必须使用类型标签,且左大括号必须在类型尾部

package main

import (
    "fmt"
)

func main() {
    //var a struct{ x int } = { 100 }     //报错
    //var b []int = { 1, 2, 3 }           //报错
    //c := struct { x int; y string }     //报错
    //{
    //}
    var a = struct { x int } { 100 }
    var b = []int{  //可以分行
                    1,
                    2,
                    3,  //分开的话,最后一行要一个','
    }

    var c = []int{  //可以分行
                        1,
                        2,
                        3}  //分开的话,最后一行要一个'}'

    fmt.Println(a, b, c)
}

IF语句

可省略条件表达式括号
支持初始化语句,可定义代码块局部变量
代码块左大括号必须在条件表达式尾部
package main

import (
    "fmt"
)

func main() {
    x := 0

    if n := "abc"; x>10 {
       fmt.Println(n[1])
    } else if x <0 {
        fmt.Println(n[2])
    } else {
        println(n[0])
    }
}

不支持三元运算符

package main

func main() {
    a := 0
    b := 1

    c := a > b ? a : b      //报错
    println(c)
}

For(循环语句)

package main

func main() {
    s := "abc"
    //常见的for循环方式
    for i,n :=0, len(s); i < n; i++ {
        println(i)
    }

    //while的for循环方式
    n := len(s)
    for n > 0 {
        println(n)
        n--
    }

    //while(true) {} 死循环
    for {
        println(s)
    }
}

Range(类似迭代器操作,返回键值)

package main

func main() {
    s := "abc"

    for i := range s {      //默认忽略值,只把键赋值给了i变量
        println(i, s[i])
    }

    for _, c := range s {   //默认丢弃了键,把值赋给了c变量
        println(c)
    }

    var d = 0
    for range s {           //抛弃键值,只循环
        d++
    }

    println(d)

    m := map[string]int{"a":1, "b":2}
    for k,v := range m {        //遍历出键值
        println(k,v)
    }
}

switch

package main

func main() {
    x := []int{1, 2, 3}
    i := 3
    switch i {
        case x[1]:
            println("a")
        case x[2], 1:
            println("b")
        default:
            println("c")
    }
}


package main

func main() {
    x := 10
    switch x {
        case 10:
            println("a")
            fallthrough //需要继续下一分支,使用fallthrough
        case 0:
            println("c")
    }
}

package main

func main() {
    x := []int{1, 2, 3}
    switch {
        case x[1] > 0:      //当做if else使用 
            println("a")
        case x[1] < 0:
            println("b")
        default:
            println("c")
    }
}

package main

func main() {
    x := []int{1, 2, 3}
    switch i := x[2]; { //带初始值
        case i > 0:
            println("a")
        case i < 0:
            println("b")
        default:
            println("c")
    }
}

goto语句

package main

func main() {
    var i int
    for {
        println(i)
        i++
        if i > 2 {
            goto TEST
        }
    }

    TEST:
        println("break")
}

break和continue

package main

func main() {
    L1:
        for x := 0;x < 3; x++ {
    L2:
            for y := 0;y < 5;y++ {
                if y > 2 {
                    continue L2
                }

                if x > 1 {
                    break L1        //break可用于for,switch,select而continue只能用于for循环
                }

                print(x, ":", y, " ")
            }

            println()
        }
}
坚持原创技术分享,您的支持将鼓励我继续创作!