变量
2018-12-24 本文已影响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