Go语言变量

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Go语言变量

参考资料主要来源于菜鸟教程。

参考链接https://blog.51cto.com/u_15230485/2821028

  变量来源于数学是计算机语言中能存储计算结果或能表示值抽象概念。

  变量可以通过变量名访问。

  Go语言变量名由字母、数字、下划线组成其中首个字符不能为数字。

  声明变量的一般形式是使用var关键字

var identifier type

  可以一次声明多个变量

var identifier1, identifier2 type
package main

import "fmt"

func main() {
	//test.New()   //包信息
	//fmt.Println("main")


	//var stockcode = 123
	//var enddate = "2020-12-31"
	//var url = "Code= %d & endDate = %s"
	//fmt.Printf(url,stockcode,enddate)

	var a string = "test"
	fmt.Println(a)

	var b,c int = 1, 2
	fmt.Println(b,c)
}

输出结果

test
1 2

变量声明

  第一种指定变量类型如果没有初始化则变量默认为零值。

var name type
name = value

  零值就是变量没有做初始化时系统默认设置的值。

package main

import "fmt"

func main() {
	var a = "test"
	fmt.Println(a)

	var b int
	fmt.Println(b)

	var c bool
	fmt.Println(c)
}

输出结果

test
0
false
  • 数值类型包括complex64/128为0

  • 布尔类型为false

  • 字符串为""空字符串

  • 以下几种类型为nil

    var a *int
    var a []int
    var a map[string] int
    var a chan int
    var a func(string) int
    var a error //error 是接口
    

实例

package main

import "fmt"

func main() {
	var i int
	var f float64
	var b bool
	var s string
	fmt.Printf("%v %v %v %q\n",i,f,b,s)
}

输出结果是

0 0 false ""

  第二种本剧值自行判定变量类型。

var name = value

实例

package main
import "fmt"
func main() {
    var d = true
    fmt.Println(d)
}

输出结果

true

  第三种如果变量已经使用var声明过了再使用:=声明变量就会产生编译错误。

TIPS这种不带声明格式的只能在函数体中出现

name := value

例如

var intVal int
intVal := 1 //这时会产生编译错误因为intVal已经声明不需要重新声明

将上述改成如下语句即可

intVal := 1 //此时不会产生编译错误因为有声明新的变量:=是一个声明语句

  intVal := 1相当于

var intVal int
intVal = 1

  即可以将var f string = ”test"简写为 f := “test”。

多变量声明

//类型相同的多个变量非全局变量
var name1,name2,name3 type
name1,name2,name3 = v1,v2,v3

var name1,name2,name3 = v1,v2,v3 //和python很像不需要显式声明类型否则会导致编译错误

name1,name2,name3 := v1,v2,v3 //出现:=左侧的变量不应该是已经被声明过的否则会导致编译错误

//这种因式分解的写法一般用于声明全局变量
var (
    name1 type
    name2 type
)

实例

package main

import "fmt"

var x,y int
var (
	a int
	b bool
)

var c,d int = 1,2
var e,f = 123, "hello"

func main() {
	g,h := 123,"world"

	fmt.Println(x, y, a, b, c, d, e, f, g, h)
}

输出结果

0 0 0 false 1 2 123 hello 123 world

值类型和引用类型

  与C/C++类似。

  • 值类型基本数据类型 int 系列, float 系列, bool, string 、数组和结构体struct使用这些类型的变量直接指向存在内存中的值值类型的变量的值通常存储在中。
  • 引用类型指针、slice切片、map、管道chan、interface 等都是引用类型

栈和堆

  在内存中分成两大块栈和堆。值类型的变量通常存储在栈区引用类型通常存储在堆区。在Go中有可能值类型也存储在堆区反过来也有可能引用类型存储在栈区。

效果图

简短形式使用:=赋值操作符

  我们知道可以在变量的初始化时省略变量的类型而由系统自动判断声明语句写上var关键字其实是显得有些多余因此我们可以将它们简写为a:=50或者b:=false。

  a和b的类型int和bool将由编译器自动推断。

  这是使用变量的首选形式但是它只能被用在函数内而不可以用于全局变量的声明与赋值。使用操作符:=可以高效地创建一个新的变量称之为初始化声明。

注意事项

  如果在相同的代码块中不可以再次对相同名称的变量使用初始化声明例如a:=20就不被允许使用编译器会提示错误但是a=20可以这相当于给相同的变量赋予一个新的值。

  如果在定义变量a之前使用它会得到一个编译错误。

  如果你声明了一个局部变量却没有在相同的代码块中使用它同样会得到编译错误。

  但是全局变量是允许声明但不使用的。同一类型的多个变量可以声明在同一行如

var a, b, c int

  多变量也可以在用一行进行赋值如

var a, b int
var c string
a, b, c = 5, 7, "abc"

  上面这行假设变量ab和c都已经被声明否则的话应该这样使用

a, b, c := 5, 7, "abc"

  右边的这些以享用的顺序赋值给左边的变量所以a的值是5b的值是7c的值是“abc”。

  这被称为并行同时赋值。

  如果发你想要交换两个变量的值则可以简单地使用a,b = b,a两个变量的类型必须是相同。

  空白标识符_也被用于抛弃值如值5在_ , b = 5, 7中被抛弃。

  _实际上一个只写变量不能得到它的值这样做是因为Go语言中必须使用所有被声明的变量但有时候并不需要使用从一个函数得到的所有返回值。

  并行赋值也别用于当一个函数返回多个返回值是比如这里的val和错误err是通过调用Func1 函数同时得到的val, err = Fun1(var1)。

空白标识符在函数返回时的使用

package main

import "fmt"

func numbers()(int,int,string){
	a,b,c := 1,2,"str"
	return a,b,c
}

func main() {
	_,num,strs := numbers()
	fmt.Println(num,strs)
}

输出结果

2 str
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go