Go-变量

作者: d4peng | 来源:发表于2020-03-30 11:13 被阅读0次

变量

变量声明

  1. 变量的声明必须是显示的声明
  2. 声明的变量必须要在代码段使用
  3. 变量类型在后,变量名称在前面
  4. 当变量声明后,所有的变量都会在内存中被初始化。例如: int类型为0,string类型为空字符串,指针类型为nil

标准格式声明变量

var name string
var v1,v2 string

上述代码第一行是声明单个变量,第二行代码是声明两个变量叫做v1,v2都是string类型,同时声明多个变量

批量格式声明变量

var (
    a int
    b string
    c []float32
    d func() bool
    e struct {
        x int
    }
)

使用关键字var以及括号,可以将变量定义放在一起。

简短格式

shortStyle := "d4peng"
fmt.Println(shortStyle)

简短格式即声明了变量,又对变量进行了初始化赋值(必须是显示化初始),只能在函数内部进行使用
因为简洁灵活的特点,简短变量被广泛的运用于大部分的局部变量初始化,因为var需要声明类型,当类型发生改动后,变量的类型也需要进行改动,所以建议使用简短格式

变量初始化

变量初始化的标准格式

var v string = "HelloWorld"

编译器推导类型的格式

var v = "HelloWorld"
// 3.14会被编译器推导成float64,如果不需要,可以直接变成float32
var f float32 = 3.14

在编译原理中,等号右边的部分叫做右值

短变量声明并初始化

// 编译器会自动依据右值类型判断出左值对应的类型
hp := 100

如果使用:=这种符号,左边的变量必须是没有定义过的,因为该符号意思就是声明+赋值

conn, err := net.Dial("tcp","127.0.0.1:8080")

简短变量在实际开发中使用的例子非常普遍

conn1, err := net.Dial("tcp","127.0.0.1:8080")
conn2, err := net.Dial("tcp","127.0.0.1:8080")

上述代码中,err这个变量被声明了两次,conn1,conn2被声明了多次,只要左边存在一个新声明的变量,编译器就不会报错

多个变量同时赋值

基于变量交换的demo

var a = int 100
var b = int 200
var c int
c = a
a = b
b = c
fmt.Println(a, b)

Go语言中变量的交换

var a = int 100
var b = int 200
a,b = b,a
fmt.Println(a, b)

匿名变量(没有名字的变量)

因为在Go语言中,变量一旦显式的定义,就需要被使用,但是有些变量可能是不需要被使用的,例如:err这种,有时候是不会出现的,直接使用_来代替这个变量就可以了,因为不需要使用。

Go语言变量的作用域

局部变量

在函数体内,函数的形数和返回值变量都属于局部变量
局部变量不是一直存在的,当定义它的函数被调用后存在,当函数调用结束后,就会被销毁

package main

import "fmt"

func main() {
    shortStyle := "d4peng"
    fmt.Println(shortStyle)
}

当这个main函数结束之后,里面的shortStyle就会被销毁

全局变量

package main

import "fmt"

var globalVar int

func main() {
    shortStyle := "d4peng"
    s := "da,s"
    globalVar = 999
    fmt.Println(shortStyle, s)
}

定义了一个全局变量globalVar,当这个变量结束之后,该变量不会被销毁,还会继续存在

package main

import "fmt"

var globalVar int

func init() {
    globalVar = 888
}

func main() {
    globalVar := 999
    fmt.Println(globalVar)
}

上述代码在main函数中,会优先考虑局部定义的globalVar,然后才会考虑的全局变量,两者不会发生冲突

形式参数

形参只有在函数调用时才会生效,函数调用结束后,就会被销毁。在函数未被调用的时候,形参并不会占用实际的存储单元,也没有实际的值,实际上就是不存在的。

相关文章