变量

2018-12-24  本文已影响5人  酷走天涯

记住以下几点

变量的声明

var name string 
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
上一篇下一篇

猜你喜欢

热点阅读