Go-变量-var

什么是变量?

  一种抽象,计算机用来保存现实数据的容器,通过这个变量抽象可以写入现实数据到计算机中,并且可以读取变量取到保存到计算机中的现实数字化数据

Go-变量定义

  关键字  var

  关键符号  :=

import "fmt"

var country  = "China"

func main() {
	var name = "beimenchuixue"
	var (
		age = 18
		school = "huGong"
	)

	work := "student"
	fmt.Println(name, age, school, work)
}

  观察发现,有以下特性

    1. 定义变量类型的时候,大多数情况下不要写变量类型,Go解释器会自动推断,特殊情况还是要加上变量类型

    2. 每句语句后面都没有分号,但是解释器在编译的时候会自动加上

    3. 定义包变量的时候只能使用 var方式定义,不能使用 := 方式

    4. := 解释器会解释为两步,先var声明类型,然后再赋值

    5. 包变量可以不使用不报错,函数变量必须使用,但我们可以通过 _ 来忽略某个不想要的变量

    6. 定义多个变量的时候通过 var() 方式

    7. Go定义变量时候,变量名在前,变量类型在后,这和其他语言变量定义风格相反

Go-变量类型    8bit=1byte

  有符号整形    int8,16,32,64

  无符号整形    uint8,16,32,64

  浮点数      float32,64

  布尔型      bool

  复数       complex64,128

  字符串      string    双引号

  单个字节字符   byte      单引号

  单个字符     rune      单引号

  错误类型     error

Go-命名规范

  1. 遵循C语言命名规范,不能以数字开头,以大小写字母、下划线、数字组成

  2. 不能是关键字,不推荐使用内置函数名

  3. 首字母大写表示包外可以访问,首字母小写表示包外不可访问

  4. 以首字母大写区分不同单词

  5. 变量名、函数名、结构体名、接口名都遵守以上规范

Go变声明时候会给初始值

  1. 数字类型 int float byte rune 为 0

  2. string 为空字符串

  3. complex 为 (0+0i)

  4. bool类型问 false

  5. error类型为 <nil>

package main

import "fmt"

func main() {
	var a int8
	var b int64
	var c float32
	var d float64
	var e bool
	var f complex64
	var g string
	var h byte
	var j rune
	var k error
	fmt.Println(a, b, c, d, e, f, g, h, j, k)
}

 以上这些基础数据类型,只能满足存放一个数据的需求

Go变量作用域(生命范围)

  1. 定义在和 package import关键字同级,为包变量,作用于包全局,包内可以访问并可以直接修改

package main

import "fmt"

var country = "China"

func PrintCountry()  {
	fmt.Println(country)
	country = "Russia"
}

func main() {
	PrintCountry()
	fmt.Println(country)
	country = "American"
	fmt.Println(country)
}

 

  2. 定义在函数内,为函数变量,作用于这个函数,函数内可以访问,函数外不可访问并且失效

package main

import "fmt"


func PrintCountry()  {
	var country = "China"
	fmt.Println(country)
}

func main() {
	PrintCountry()
}

 

  3. 定义在循环分支中,为循环分支变量,只能循环分支中可以访问,出循环分支外不可访问并且失效

package main

import "fmt"

func Count()  {
	start := 0
	for i := 0; i<=100 ; i ++ {
		start = i
		fmt.Println(start)
	}
	fmt.Println(start)
	//fmt.Println(i)
}

func main() {
	Count()
}

 

  4. 形式上看,每对 {}形成一个作用域,都可以很轻松修改掉能访问到的外部作用域变量并做出修改,但是外部作用域不能访问内部作用域变量

posted @ 2018-05-14 15:10  梦_鱼  阅读(503)  评论(0编辑  收藏  举报