Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性。

在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。 举几个例子:abc, _, _123, a123

关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。

Go语言中有25个关键字:

  1. break default func interface select
  2. case defer go map struct
  3. chan else goto package switch
  4. const fallthrough if range type
  5. continue for import return var

此外,Go语言中还有37个保留字。

  1. Constants: true false iota nil
  2. Types: int int8 int16 int32 int64
  3. uint uint8 uint16 uint32 uint64 uintptr
  4. float32 float64 complex128 complex64
  5. bool byte rune string error
  6. Functions: make len cap new append copy close delete
  7. complex real imag****
  8. panic recover

变量(Variable)的功能是存储数据。不同的变量保存的数据类型可能会不一样。经过半个多世纪的发展,编程语言已经基本形成了一套固定的类型,常见变量的数据类型有:整型、浮点型、布尔型等。

Go语言中的每一个变量都有自己的类型,并且变量必须经过声明才能开始使用。

Go语言中的变量需要声明后才能使用,同一作用域内不支持重复声明。 并且Go语言的变量声明后必须使用。

Go语言的变量声明格式为:

  1. var 变量名 变量类型

变量声明以关键字var开头,变量类型放在变量的后面,行尾无需分号。 举个例子:

  1. var name string
  2. var age int
  3. var isOk bool

当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil 等。所有的内存在 Go 中都是经过初始化的

Go语言的基本类型有:

  • bool
  • string
  • int、int8、int16、int32、int64
  • uint、uint8、uint16、uint32、uint64、uintptr
  • byte // uint8 的别名
  • rune // int32 的别名 代表一个 Unicode 码
  • float32、float64
  • complex64、complex128

变量的命名规则遵循骆驼命名法,即首个单词小写,每个新单词的首字母大写,例如:numShips 和 startDate 。

每声明一个变量就需要写var关键字会比较繁琐,go语言中还支持批量变量声明:

  1. var (
  2. a string
  3. b int
  4. c bool
  5. d float32
  6. )

简短格式:
名称:=表达式

需要注意的是,简短模式(short variable declaration)有以下限制:

  • 定义变量,同时显式初始化。
  • 不能提供数据类型。
  • 只能用在函数内部。

Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,
例如: 整型和浮点型变量的默认值为0。 字符串变量的默认值为空字符串。 布尔型变量默认为false。 切片、函数、指针变量的默认为nil

当然我们也可在声明变量的时候为其指定初始值。变量初始化的标准格式如下:

  1. var 变量名 类型 = 表达式

举个例子:

  1. var name string = "Q1mi"
  2. var age int = 18

或者一次初始化多个变量

  1. var name, age = "Q1mi", 20
  1. var damageRete =0.17
  2. Go语言和C语言一样,编译器会尽量提交精确度,以避免计算中精度损失,
  3. 不指定damageRete 变量的类型,Go语言比那一起会将damageRete类型推导为 float64
  1. package main
  2. import "fmt"
  3. func main() {
  4. // fmt.Println("hello word")
  5. var name string = "heyichen "
  6. fmt.Println(name)
  7. }

有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完成初始化。

  1. var name = "Q1mi"
  2. var age = 18

在函数内部,可以使用更简略的 := 方式声明并初始化变量。

  1. package main
  2. import "fmt"
  3. // 全局变量m
  4. var m = 100
  5. func main() {
  6. n := 10
  7. m := 200 // 此处声明局部变量m
  8. fmt.Println(m, n)
  9. }

在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量(anonymous variable)。 匿名变量用一个下划线_表示,例如:

  1. package main
  2. import "fmt"
  3. func foo() (int, string) {
  4. return 10, "heyichen"
  5. }
  6. func main() {
  7. x, _ := foo()
  8. _, y := foo()
  9. fmt.Println("x=", x)
  10. fmt.Println("y=", y)
  11. }

匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。 (在Lua等编程语言里,匿名变量也被叫做哑元变量。)

注意事项:

  1. 函数外的每个语句都必须以关键字开始(var、const、func等)
  2. :=不能使用在函数外。
  3. _多用于占位,表示忽略值。
  4. 在go语法中,双引号是常用的来表达字符串,如果你使用了单引号,编译器会提示出错invalid character literal (more than one character)
  5. 如果非要使用单引号输出必须使用string函数转换
    fmt.Println(string('a') )

注意:

​ Printf 和 Println 的区别:

  • printf 输出后不换行, println输出后自动换行;
  • printf格式化输出,println 直接输出内容

​ 导包和定义变量

​ 在golang中,倒入的包和定义的变量都必须被引用,否则编译器会报错,这点不同于python,在python 中引入的包和定义的变量即使没有被使用解释器也不会报错。

​ 赋值时的下划线

​ _, b = 5, 7

​ 在上面的语句中,5这个值被丢弃。在golang中一个值被赋予下划线表示被丢弃

golang中字符串
字符串类型在 go 里是个结构, 包含指向底层数组的指针和长度,这两部分每部分都是 8 个字节,所以字符串类型大小为 16 个字节。

go语言缩进
go语言默认缩紧为tab,不同于python,后者推荐使用空格。

编译部署
go是编译型语言,并且可以在一个平台上编译多个平台的版本,我们称之为交叉编译

版权声明:本文为heych原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/heych/p/12577441.html