当前位置: 首页 > news >正文

Go语言变量

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"

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

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

  右边的这些以享用的顺序赋值给左边的变量,所以a的值是5,b的值是7,c的值是“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

相关文章:

  • wordpress分享/营销网站方案设计
  • 怎样做静态网站/公关团队
  • 网站建设犀牛/微信推广多少钱一次
  • 内链好的网站/童程童美少儿编程怎样收费
  • 南宁企业网站建设技术公司/网络推广主要内容
  • 专做banner的网站/成都百度关键词排名
  • 不会数学的程序员,只能走到初级开发工程师!
  • Java 中是如何获取 IP 属地的
  • 工作的同时,我也在这里做副业
  • 从零开始学JAVA(05):面向对象编程--02
  • 2022-12-10青少年软件编程(C语言)等级考试试卷(二级)解析
  • 22.Isaac教程--使用 Isaac Sight可视化
  • 干货 | 大数据交易所数据安全流通体系标准化尝试
  • [JavaEE]阻塞队列
  • 面试干货!初级软件测试面试题及答案题库一起奉上
  • 云原生|kubernetes|2022年底cks真题解析(1-10)
  • RK35XX(3568) Android WSL ubuntu22.04 编译环境配置
  • leetcode--各种数据结构相关的题