zoukankan      html  css  js  c++  java
  • GO编程基础之三

    1.指针:

       GO虽然保留了指针,但与其他编程语言不同的是,在GO当中不支持指针运算以及"->"运算符,而直接采用"."选择符来操作指针目标对象的成员

    --操作符"&"取变量地址,使用"*"通过指针间接访问目标对象

    --默认值为nil而非NULL

    func main(){
        a := 1                //int型变量a
        var P *int = &a       //指向int的指针P
        fmt.Println(P);       //输出P所指向的内存地址
    fmt.Println(P*); //输出P指针指向地址的值 }

    2.递增递减语句:

         在GO当中,++与--是作为语句并不是作为表达式;

         表达式是可以放在等号右边的;比如:a := a++   这样在GO语句是不被允许的;

          语句只能作为单独的一行;

    func main(){
        a := 1
        a++
        var P *int = &a
        fmt.Println(*P);
    }

    3.判断语句IF:

    ---条件表达式没有括号;

    ---支持一个初始化表达式(可以是并行方式);

    func main(){
    a := 1
    if a :=1;a > 1{ //初始化变量a是一个局部变量,等if语句块全部执行完后变量a就不存在了 fmt.Println(a); } fmt.Println(a); //如果外部也定义一个变量a,这个时候外部的变量a在if语句块中就会被暂时隐藏起来,整个if语句中都只会用初始化的变量a }

    ---左大括号必须和if语句或else放在同一行;

    ---支持单行模式

    ---初始化语句中的变量为block级别,同事隐藏外部同名变量

    4.循环语句for

    ---Go只有for一个循环语句关键字,但支持3中形式;

    (1)无限循环:只有一个for循环,必须在循环中判断条件并退出循环

    func main(){
        a := 1
        for {
            a++
            if a>3 {
                break
            }
            fmt.Println(a)   //输出2,3,over
        }

        fmt.Println("Over");
    }

    (2)for语句自己带有一个条件表达式

    func main(){
        a := 1
        for a <= 3{
            a++
            fmt.Println(a)
        }
    
        fmt.Println("Over");    //输出2,3,4,over
    }
    (3)for循环包含:计数器的初始化,条件判断语句和步进表达式
    func main(){
        a := 1
        for i :=0;i < 3;i++{
            a++
            fmt.Println(a)
        }
    
        fmt.Println("Over");
    }

    ---初始化和步进表达式可以是多个值;

    ---条件语句每次循环都会被重新检查,因此不建议在条件语句中使用函数,尽量提前计算好条件并以变量或常量代替

    func main(){
        a := "string"
    l := len(a)
    for i :=0;i < len(a);i++{ //for循环每次都会执行len函数,降低了程序运行效率不如把len函数放在for循环之外 fmt.Println(a) } fmt.Println("Over"); }

    ---左大括号必须和条件语句在同一行

    5.选择语句switch:

    ---可以使用任何类型或表达作为条件语句;

    ---不需要写break,一旦条件符合自动终止;

    ---如希望继续执行下一个case,需要使用fallthrough语句;

    ---支持一个初始化表达式(可以是并行方式),右侧需跟分号

    ---左大括号必须和条件语句在同一行;

     (1)一般形式,switch后加条件表达式:

    func main(){
        a := 1
        switch a {
        case 0:
            fmt.Println("a=0")
        case 1:
            fmt.Println("a=1")
        default:
            fmt.Println("None")
    
        } 
    }

    (2)case后加条件表达式:

    func main(){
        a := 1
        switch {
        case a >= 0:              //满足条件就跳出了,不继续下一个case
            fmt.Println("a>=0")   
    fallthrought //即使第一个case符合条件,还是会继续检查下一个case
    case a >= 1: fmt.Println("a>=1") default: fmt.Println("None") } }

    (3)switch后加初始化语句:初始化变量a的作用域范围在switch语句块中,是局部变量;

    func main(){
        
        switch a := 1; {
        case a >= 0:
            fmt.Println("a=0")
        case a >= 1:
            fmt.Println("a=1")
        default:
            fmt.Println("None")
    
        } 
        fmt.Println(a)
    }

    6.跳转语句:goto,break,continue

    ---三个语法都可以配合标签使用;

    ---标签名区分大小写,若不使用会造成编译错误;

    ---Break与continue配合标签可用于多层循环的跳出;

    ---Goto是调整执行位置,与其他2语句配合标签的结果并不相同;

    (1)原来的break只能跳出一层循环:只能跳出第一个for有限循环,但是跳不出最上层的for无限循环;

    func main(){
    LABEL1:
        for{
            for i := 0;i < 10;i++{
                if i > 3{
                    break
                }
            }
        }
    }

    (2)使用标签后,break可以跳出到和LABEL1同一级的循环层:

    func main(){
    LABEL1:
        for{
            for i := 0;i < 10;i++{
                if i > 3{
                    break LABEL1      //如果将这里的break改成goto,程序就会又跳到LABEL1继续执行,容易造成死循环
                }
            }
        }
    fmt.Println("OK") }

    (3)使用goto,尽量把goto放到,标签之前;

    func main(){
        for{
            for i := 0;i < 10;i++{
                if i > 3{
                    goto LABEL1
                }
            }
        }
    LABEL1:    
        fmt.Println("OK")
    }

    (4)continue:

    func main(){
    LABEL1:
        for i := 0;i < 10; i++{
            for{
                continue LABEL1
                fmt.Println(i)       //内部的无限循环语句永远不会被执行,因为continue直接跳到外部的有限循环语句执行了
            }        
        }    
        fmt.Println("OK")
    }
  • 相关阅读:
    SQLite在iOS开发中的使用
    实现序列化和反序列化
    NSPredicate用于对集合类中的元素进行筛选
    通知中心NSNotification与委托的异同,需要注意的要点
    OC 重写description,isEqual方法
    iOs 单例模式的定义,实现、步骤
    Obejctiv-c 里面KVC 和 KVO的实现步骤,和有关方法
    关于NSTimer的几种构建方式
    NSTimer 实现到一个指定时间(年、月、日)的倒计时
    关于UILable、UIButton、UITextField简单运用
  • 原文地址:https://www.cnblogs.com/hqutcy/p/9973354.html
Copyright © 2011-2022 走看看