Golang 基础(四)变量

Overview

  • 声明变量
    • 声明+赋值
    • 先声明后赋值
  • 全局变量与局部变量
  • 作用域
    • 一个{}就是一个作用域
    • 作用域变量引用
      • 同级别的作|用域中的变量可以引用
      • 上级无法引用下一级的变量
    • 作用域只可以引用同级或上一级(父级)的变量
      • 引用上一级
      • 引用同一级
  • 变量简写
  • 因式分解
  • 变量与内存关系

Description

1)声明变量

  • 声明+赋值

package main

import "fmt"

func main() {
	var name string = "Jeremy"
	fmt.Println(name)
}
  •  先声明,后赋值

package main

import "fmt"

func main() {
	var name string
	name = "Jeremy"
	fmt.Println(name)
}

 2)全局变量和局部变量

  • 全局变量 

全局变量是写在顶格的变量,一般用于通用变量使用

package main

import "fmt"

var result string = "OK"

func main() {
	fmt.Println(result)
}
  •  局部变量

 局部变量是在函数func中,一个{}内的变量即是一个局部变量

package main

import "fmt"

func main() {
	var result string = "OK"
	fmt.Println(result)
}

3)作用域

一个{}就是一个作用域

package main

import "fmt"

func main() {
	var result_1 string = "OK"
	fmt.Println(result_1)
	if true {
		var result_2 string = "No"
		fmt.Println(result_2)
	}
}

 这里有2个作用域func{}和 if true{}, if true{}的作用域是func{}的子集,也就是func{}是if true{}的上级(父级)

  • 作用域变量引用

同级别的作用域中的变量可以被引用

package main

import "fmt"

func main() {
	var result_1 string = "OK"
	fmt.Println(result_1)
	if true {
		var result_2 string = "No"
		fmt.Println(result_2)
		var result_3 string
		result_3 = "Updating"
		result_3 = "Completed"
		fmt.Println(result_3)
	}
}

 上级无法引用下一级的变量

package main

import "fmt"

func main() {
	var result_1 string = "OK"
	fmt.Println(result_1)
	fmt.Println(result_2)
	fmt.Println(result_3)
	if true {
		var result_2 string = "No"
		fmt.Println(result_2)
		var result_3 string
		result_3 = "Updating"
		result_3 = "Completed"
		fmt.Println(result_3)
	}
}

 作用域只可以引用同级或上一级(父级)的变量

  •  引用上一级

这个案例中,在最内部的作用域中并没有定义变量name, 所以一直向上一级寻找变量name,直到找到为止,若没有找到定义该变量,则语法会报错,当找到变量name后,输出该变量的值  

package main

import "fmt"

func main() {
	var name string = "Jeremy"
	if true {
		if true {
			fmt.Println(name)
		}
	}
}
  • 引用同一级

这个案例中,最内部没有找到定义变量的内容,于是一直向上找,直到找到为止,找到var name string = "Jeremy", 最内部又对name重新赋值,则最终结果则是Kelvin

package main

import "fmt"

func main() {
	var name string = "Jeremy"
	if true {
		if true {
			name = "Kelvin"
			fmt.Println(name)
		}
	}
}

4)变量简写

局部变量简写 ( var name string = "Jeremy")

可以简写为 var name = "Jeremy"

package main

import "fmt"

func main() {
	var name = "Jeremy"
	fmt.Println(name)
}

也可以简写为 name := "Jeremy"

package main

import "fmt"

func main() {
	name := "Jeremy"
	fmt.Println(name)
}

全局变量简写( var name string = "Jeremy")

可以简写为var name = "Jeremy"

package main

import "fmt"

var name = "Jeremy"

func main() {
	fmt.Println(name)
}

 不可以简写为name := "Jeremy"

5)因式分解

可以将各种变量放到一个()里

package main

import "fmt"

func main() {
	var (
		name   string = "Jeremy"
		age    int    = 18
		color  string
		gender = "Male"
	)
	fmt.Println(name, age, color, gender)
}

 未定义的变量,都有默认值,比如int就是0,string是个空,bool是false

6)变量与内存关系

声明赋值一个变量

定义一个变量: var name string = "Jeremy", 则会在内存中创建一块内存地址0xc00004e250保存Jeremy

package main

import "fmt"

func main() {
	var name = "Jeremy"
	fmt.Println(name, &name)
}

 内存关系

 对变量再次引用

 定义另一个变量nickname等于变量name,可以看到nickname的值和name的值都一样为Jeremy,但是内存地址不一样,原因是因为在Go中,变量的引用是在内存中重新Copy一份内存地址

package main

import "fmt"

func main() {
	var name = "Jeremy"
	fmt.Println(name, &name)
	nickname := name
	fmt.Println(nickname, &nickname)
}

内存关系

Golang 基础(四)常量-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值