变量声明:
- 首字符是否大写控制了访问性,大写外包可以访问
import "fmt"
var a int = 10 // 一种标准格式
var b = 1.0 // 编译器自动推导类型
// c := 10 // 必须在函数代码块中声明
// a := 100 // 推导声明写法的左值变量必须是没有定义过的变量
func main() {
c := 100
a, c = c, a // 允许多个变量同时赋值,赋值顺序是从左到右
_, c = a*100, a-1 // 支持匿名变量,匿名变量不占用内存空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用。
fmt.Println(a, b, c)
}
常量声明:
- 支持类型推断
- 无法修改值
const pi = 3.141596
const (
e = 2.7182818
pi = 3.1415926
) // 批量声明多个常量
类型别名: 比较特殊的字符类型 byte 和 rune:
- 一种是 uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符。
- 另一种是 rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型。
数据类型转换:
Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明
func main() {
a := 10
b := 1.0
//a, b = b, a // 没有隐式转换
a, b = int(b), float64(a)
fmt.Println(a, b)
}
变量的声明周期:
- 全局变量:它的生命周期和整个程序的运行周期是一致的;
- 局部变量:它的生命周期则是动态的,从创建这个变量的声明语句开始,到这个变量不再被引用为止;
- 形式参数和函数返回值:它们都属于局部变量,在函数被调用的时候创建,函数调用结束后被销毁。
在程序的编译阶段,编译器会根据实际情况自动选择在栈或者堆上分配局部变量的存储空间,不论使用 var 还是 new 关键字声明变量都不会影响编译器的选择。
可以看出,Go语言还是非常有自己的特点的,开始学习的时候感觉其有着python的简介性,也有着c++的妙所在,同时有着指针等操作,是一门非常优秀的语言!