声明

1.四种类型的声明语句:var、const、type和func,分别对应变量、常量、类型和函数实体对象的声明
2.包一级声明语句声明的名字可在整个包对应的每个源文件中访问,局部声明的名字就只能在函数内部很小的范围被访问

常量 、变量

  1. var 变量名字 类型 = 表达式
  2. 零值初始化机制,数值类型零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil
  3. 同时声明一组变量,用逗号分隔
  4. 简短变量声明 := ,只有对已经在同级词法域声明过的变量才和赋值操作语句等价

1. demo

package main

import "fmt"

// 常量声明
const boilingF = 212.0

//func main() {
//    var f = boilingF
//    var c = (f - 32) * 5 / 9
//    fmt.Printf("%g° or %g℃", f, c)
//}

func main() {
    // 变量声明
    const freezingF, boiling = 32.0, boilingF
    // 调用函数 fToC 计算 入参为 float64 类型,返回参数为 float64 类型
    fmt.Printf("%g°F = %g°C\n", freezingF, fToC(freezingF)) // "32°F = 0°C"
    fmt.Printf("%g°F = %g°C\n", boiling, fToC(boiling))     // "212°F = 100°C"
}

// 入参为 float64 类型,返回参数为 float64 类型
func fToC(f float64) float64 {
    // 计算并返回
    return (f - 32) * 5 / 9
}

2. 变量的生命周期

变量的生命周期指的是在程序运行期间变量有效存在的时间段。对于在包一级声明的变量来说,它们的生命周期和整个程序的运行周期是一致的。而相比之下,局部变量的生命周期则是动态的:每次从创建一个新变量的声明语句开始,直到该变量不再被引用为止,然后变量的存储空间可能被回收。函数的参数变量和返回值变量都是局部变量。它们在函数每次被调用的时候创建。

Go语言的自动垃圾收集器对编写正确的代码是一个巨大的帮助,但也并不是说你完全不用考虑内存了。你虽然不需要显式地分配和释放内存,但是要编写高效的程序你依然需要了解变量的生命周期。例如,如果将指向短生命周期对象的指针保存到具有长生命周期的对象中,特别是保存到全局变量时,会阻止对短生命周期对象的垃圾回收(从而可能影响程序的性能)。

results matching ""

    No results matching ""