2. Go语言基本语法 - 变量及常量

一、变量

(一)变量的概念

  1. 变量时计算机语言中存储数据的抽象概念。变量的功能是存储数据。变量通过变量名访问;
  2. 变量的本质是计算机分配的一小块内存,专门用于存放指定 数据,在程序运行过程中该数据可以发生改变;
  3. 变量的存储往往具有瞬时性,当程序运行结束,存放该数据的内存就会释放,而该变量就会消失;
  4. Go语言的变量名由字母、数字、下划线组成,首个字符不能输数字;

(二)声明变量

Go主要有静态语言、函数多返回值、天生并发、内置GC(自动垃圾回收)、安全性高、语法简单、编译快速。
- 静态语言:编译时变量的数据类型即可确定的语言,要求在使用变量之前必须声明数据类型
  1. 未初始化的标准格式
var 变量名 变量类型
  1. 未初始化批量格式
var(
	a int
    b string
    c []float32
    d func() bool
    e struct{
        x int
        y string
    }
)
未初始化变量的默认值

- 整型和浮点型变量默认值 0
- 字符串默认值 ""
- 布尔值默认值 false
- 函数、指针变量默认值 null
package main

import "fmt"

func main() {
	var (
		a int
		b string
		c float32
		d bool
		e func() string
		f [3]int
	)

	fmt.Printf("%T %v \n", a, a)
	fmt.Printf("%T %v \n", b, b)
	fmt.Printf("%T %v \n", c, c)
	fmt.Printf("%T %v \n", d, d)
	fmt.Printf("%T %v \n", e, e)
	fmt.Printf("%T %v \n", f, f)
}


结果:
int 0 
string  
float32 0 
bool false 
func() string <nil> 
[3]int [0 0 0] 

  1. 初始化变量的标准格式
var 变量名 类型 = 表达式
  1. 初始化变量的编译器自动推断类型格式
var 变量名 = 表达式
  1. 初始化变量的简短声明格式
  • 变量名 := 表达式
  • 使用 := 赋值操作符,:= 可以高效创建一个新的变量,称之为初始化声明
  • 声明语句省了 var 关键字
  • 变量类型将由编译器自动推断
  • 这是声明变量的首选形式,但它只能被用在函数体内,而不可以用于全局变量的声明与赋值
  • 该变量名必须是没有定义过的变量,若定义过,将发生编译错误
  • 在多个短变量声明和赋值中,至少有一个新声明的变量出现在左侧中,那么即便有其他变量名可能是重复声明的,编译器不会报错
package main

import "fmt"

// 声明全局变量
var n = 10

func main() {
	// 短变量初始化
	m := 20
	fmt.Printf("%T %v \n", m, m)
	fmt.Printf("%T %v \n", n, n)
    
    // 为变量赋多个值
    a, b, c := "Hello", "World", 100
    fmt.Printf("%T %v \n", a, a)
	fmt.Printf("%T %v \n", b, b)
    fmt.Printf("%T %v \n", c, c)

}

结果:
int 20 
int 10

(三)变量多重赋值(多个变量同时赋值)

​ Go语法中,变量初始化和变量赋值是两个不同的概念。Go语言的变量赋值与其他语言一样,可以实现变量交换。

(四)匿名变量

  • Go语言的函数可以返回多个值,而事实上我们并不是对所有的返回值都用得上。那么就可以使用匿名变量,"_" 下划线替换即可
  • 匿名变量不占命名空间,不会分配内存
package main

import "fmt"


func main() {
	// 匿名变量
	m,_ := 20,"enen"
	fmt.Printf("%T %v \n", m, m)
	
    // 变量互换
    x := 100
    y := 200
    fmt.Println(x, "--", y)
    x, y = y, x
    fmt.Println(x, "--", y)
}

结果:
100 -- 200
200 -- 100

posted @ 2020-05-21 22:50  qi.hu  阅读(178)  评论(1编辑  收藏  举报