Go 语言中的变量,与python和c++的差异 | Go 语言入门指南

71 阅读3分钟

GO 语言变量声明

var声明语句可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量的初始值。变量声明的一般语法如下:

var 变量名字 类型 = 表达式

GO语言利用var进行变量声明,而在C++与python中并没有var关键字,但c++中变量的类型必须明确指定,而python更加简化,无需声明变量类型而是通过赋值的内容进行自动推导。

同时在GO中如果声明变量时没有进行赋值,那么将用零值初始化该变量。 数值类型变量对应的零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil。数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值。

Python没有显式的变量声明语句,因此python不存在未初始化的变量。但在C++中可以声明一个变量而未初始化,使用这些未初始化的变量可能会导致未定义行为,这些未定义的行为很可能导致意想不到的错误,因此为了避免未初始化变量的问题,应该始终在声明变量时初始化它们。

简短变量声明

在函数内部,有一种称为简短变量声明语句的形式可用于声明和初始化局部变量。它以

“名字 := 表达式”

形式声明变量,变量的类型根据表达式来自动推导。然而,这种声明方式确实有一些限制,最主要的是它不能用于包级别的作用域(即在函数外部或全局作用域中)。这包括main函数外部的任何地方,因为main函数本身也是包级别的一个函数。

指针

在Go中,指针是一个变量类型,它存储了另一个变量的内存地址。与C++不同,Go中的指针相对简单且安全。 如果用“var x int”声明语句声明一个x变量,那么&x表达式(取x变量的内存地址)将产生一个指向该整数变量的指针,指针对应的数据类型是*int,指针被称之为“指向int类型的指针”。如果指针名字为p,那么可以说“p指针指向变量x”,或者说“p指针保存了x变量的内存地址”。同时*p表达式对应p指针指向的变量的值。一般*p表达式读取指针指向的变量的值,这里为int类型的值,同时因为*p对应一个变量,所以该表达式也可以出现在赋值语句的左边,表示更新指针所指向的变量的值。

  • Go中的指针不支持指针运算(如指针加减),这减少了因指针操作不当而导致的内存错误。
  • 垃圾回收机制帮助管理内存,减少了内存泄漏的风险。