2、go变量定义

92 阅读1分钟

变量定义

go是静态语言

  • 1、变量必须先定义后使用
  • 2、变量必须有类型
  • 3、类型定义后不能改变
  • 4、变量定义了必须使用(全局变量除外)
语言变量
	var identifier type
	变量声明
		1、指定变量类型,如果没有初始化,则变量默认零值
			数值类型: 0
			布尔类型: false
			字符串:  ""
			返回值为:nil
				var a *int
				var a [] int
				var a map[string] int
				vat a chain int
				var a func(string) int
				var a error //error是接口
		2、根据值自行判断变量类型
			var name = 'name'
		3、如果变量已经使用var声明过了,再使用:=声明变量,就产生编译错误
			v_name := value
			intVal := 1 等价于 var intVal int = 1
	值类型和引用类型
		值类型
			int float bool string
				这些都属于值类型,使用这些类型的变量直接指向内存中的值
				赋值:通过值拷贝方式
				储存在堆中
		引用类型
			赋值:指针(内存地址)拷贝
			储存在栈中
	多变量声明
		非全局变量
			var identifier1, identifier2 type
		因式分解关键字的写法一般用于全局变量
			var (
                            vname1 v_type1	
                            vname2 v_type2
                        )

package main

import (
	"fmt"
)

// 全局变量
var (
	count1 int8   = 0
	count2 int8   = 10
	uname  string = "test"
)

func main() {
	age := 1

	fmt.Println(age)

	var age2 int
	fmt.Println(age2)

	// 多变量定义
	var user1, user2, user3 = "igor", "yu", "yuyu"
	fmt.Println(user1, user2, user3)

	// 一般用来定义全局变量
	var (
		name1 string = "fu1"
		name2 string = "fu2"
		name3 string = "fu3"
		num1  int8   = 10
		num2  int8   = 20
	)

	fmt.Println(name1, name2, name3, num1, num2)
}

匿名变量的定义和用途

package main

import (
	"fmt"
)

func a() (int, bool) {
    return 0, false
}
func main() {
    var _ int // 匿名变量,声明后不强制使用
    _,  ok :=  a()
    if ok {
        // do 
    }
}

变量的作用域

    1. 全局作用域
    1. 局部作用域