常量,就是在程序编译阶段就确定下来的值,而程序在运行时则无法改变该值。变量是程序的基本组成单位,用于存储和表示可变的数据。
常量,就是在程序编译阶段就确定下来的值,而程序在运行时则无法改变该值。在Go程序中,常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。
常量的定义格式如下:
Go
const identifier [type] = value
identifier 是你为常量指定的名字。
[type] 是可选的,用于显式指定常量的数据类型。如果不提供类型,则编译器会根据 value 的初始值自动推断出类型。
value 是常量的值,它可以是布尔型、数字型(包括整数、浮点数和复数)、字符串或其他常量表达式的结果。
实例
package main
func main() {
const PI float64 = 3.14
const PI2 = 3.1415 // 可以省略类型
const (
width = 100
height = 200
)
const i, j = 1, 2 // 多重赋值
const a, b, c = 1, 2, "foo"
}
const同时声明多个常量时,如果省略了值则表示和上面一行的值相同
package main
import "fmt"
func main() {
const (
a1 = 100
a2
a3
)
fmt.Printf("a1: %v\n", a1)
fmt.Printf("a2: %v\n", a2)
fmt.Printf("a3: %v\n", a3)
}
运行结果
a1: 100
a2: 100
a3: 100
iota 比较特殊,可以被认为是一个可被编译器修改的常量,它默认开始值是0,每调用一次加1。遇到 const 关键字时被重置为 0。
实例
package main
import "fmt"
func main() {
const (
a1 = iota
a2 = iota
a3 = iota
)
fmt.Printf("a1: %v\n", a1)
fmt.Printf("a2: %v\n", a2)
fmt.Printf("a3: %v\n", a3)
}
运行结果
a1: 0
a2: 1
a3: 2
使用_跳过某些值
package main
import "fmt"
func main() {
const (
a1 = iota
_
a2 = iota
)
fmt.Printf("a1: %v\n", a1)
fmt.Printf("a2: %v\n", a2)
}
运行结果
a1: 0
a2: 2
iota声明中间插队
package main
import "fmt"
func main() {
const (
a1 = iota
a2 = 100
a3 = iota
)
fmt.Printf("a1: %v\n", a1)
fmt.Printf("a2: %v\n", a2)
fmt.Printf("a3: %v\n", a3)
}
运行结果
a1: 0
a2: 100
a3: 2
不可变性:一旦定义,常量的值就不能被更改。
类型安全:每个常量都有明确的类型,不能进行不兼容类型的隐式转换。
编译期确定:常量表达式的值在编译阶段就已经计算出来,而非运行时。
通过以上介绍,可以看出Go语言中的常量提供了简洁的方式来定义程序中不变的值,并且通过类型检查确保了程序的健壮性和可预测性。
在Go语言中,变量是程序的基本组成单位,用于存储和表示可变的数据。以下是Go语言中关于变量的详解:
基本格式:
var identifier type = value
其中 identifier 是变量名,type 是变量的类型(如 int、string、float64 等),value 是初始值。例如:
var name string = "Alice"
var age int = 25
简写形式:
如果初始化时明确给出了变量的值,可以省略变量类型的声明,Go编译器会根据赋值表达式的类型自动推断变量类型。
var name = "Bob" // 编译器推断name为string类型
var age = 30 // 编译器推断age为int类型
同时声明多个变量:
同一行内可以声明多个同类型变量,用逗号分隔。
var a, b, c int = 1, 2, 3
短变量声明:
在函数内部,还可以使用简化的变量声明方式,即:=操作符来同时声明并初始化变量,无需使用var关键字。此方式只适用于局部变量。
func main() {
x, y := 10, 20 // 声明并初始化x和y
}
匿名变量(Blank Identifier):
使用下划线 _ 作为变量名时,表示该变量被声明但不使用,主要用于忽略函数返回的多余值。
_, err := someFunctionReturningMultipleValues()
var variableName),默认为包私有(不可从其他包直接访问)。""(空字符串),布尔型为false等。虽然Go是静态类型语言,但在必要时可以通过显式转换操作将一种类型转换为另一种类型。
在程序设计中,常量(Constants)和变量(Variables)扮演着至关重要的角色,它们都是存储数据的基本元素,但各自的特性和使用场景各有不同:
常量的重要性:
PI 替代具体的浮点数,使其他开发者更容易理解代码意图,减少阅读难度。变量的重要性:
综上所述,常量和变量在程序设计中共同构建了一个灵活且可靠的数据模型,保证了程序既能够在必要时持有静态不变的数据,又能够根据需要处理动态变化的信息。同时,恰当的使用两者还能促进代码的清晰度、健壮性和性能优化。