变量

作者: 酷走天涯 | 来源:发表于2018-12-24 09:22 被阅读5次

    记住以下几点

    • go的实体包括 变量 函数 结构体 和接口

    • go是静态类型的编程语言,所以在声明变量的时候必须指明类型

    变量的声明

    • 方法1
    var name string 
    
    • 方法2 直接赋值
    package main
    
    import (
        "flag"
        "fmt"
    )
    
    func main(){
      var name = flag.String("name","默认值","请输入一个值")
      fmt.Println(name)
    }
    

    猜猜结果

    image.png

    为什么不是xujie呢?因为flag.String()返回的是值的地址,那么我们怎么才能取到地址的值呢?

    package main
    
    import (
        "flag"
        "fmt"
    )
    
    func main(){
      var name = flag.String("name","默认值","请输入一个值")
      fmt.Println(*name)
    }
    
    image.png

    *name 代表从地址name的地方去对应指针的值,这里有一个问题为什么不是xujie呢?

    因为我们少调用了一个解析的数据的方法

    package main
    import (
        "flag"
        "fmt"
    )
    func main(){
      var name = flag.String("name","默认值","请输入一个值")
      flag.Parse()
      fmt.Println(*name)
    }
    
    image.png
    • 短变量声明
    name:=12
    

    go 语言具有类型推断能力,所以不需要进行声明,就可以直接将值赋值给变量,类型推断是一种在编译期能够自动解析表达式的能力

    扩展

    • 取地址 &
    package main
    import (
      "fmt"
    )
    
    func main(){
      name:= 12
      fmt.Println(&name)
    }
    
    
    image.png
    • 短变量声明的优势
    package main
    import (
            "fmt"
    )
    
    func main(){
      name:= doSometing()
      fmt.Println(name)
    }
    
    func doSometing() interface{}{
        var name = "ABCDE"
        return name
    }
    

    如果我们要重构doSometing 里面的方法,name很简单 main方法中不用改动一句代码,如我们需要将name 改成age = 123

    go 语言的类型推断能力,明显的提升了程序的灵活性,使得代码重构变的更加容易,同时不会给代码维护代码额外的负担,更不会损失程序的运行效率,同时也可以进行重声明

    • 重声明
    package main
    import (
        "fmt"
        "io"
        "os"
    )
    
    func main(){
        var err error
        n, err := io.WriteString(os.Stdout,"hello ") // 重声明
        fmt.Print(n)
        fmt.Print(err)
    }
    
    image.png

    相关文章

      网友评论

          本文标题:变量

          本文链接:https://www.haomeiwen.com/subject/twfyzftx.html