面试题答案
一键面试类型特性
- 类型推导:Go语言的字面常量具有无类型(untyped)特性,但会根据上下文推导出具体类型。例如,数字字面常量
42
本身无类型,但在不同场景下会有不同类型推导:
package main
import "fmt"
func main() {
var a int = 42
var b float64 = 42
var c complex128 = 42
fmt.Printf("%T\n", a) // int
fmt.Printf("%T\n", b) // float64
fmt.Printf("%T\n", c) // complex128
}
- 支持多种基础类型:支持整数、浮点数、复数、布尔值、字符串和符文(rune)等字面常量。例如:
const (
numInt = 10
numFloat = 3.14
numComplex = 2 + 3i
boolVal = true
strVal = "hello"
runeVal = 'a'
)
作用域特性
- 全局作用域:在包级别声明的字面常量具有全局作用域,可在包内任何地方访问。
package main
import "fmt"
const globalConst = "I'm a global constant"
func main() {
fmt.Println(globalConst)
}
- 局部作用域:在函数内部声明的字面常量具有局部作用域,只能在该函数内访问。
package main
import "fmt"
func main() {
const localConst = "I'm a local constant"
fmt.Println(localConst)
}
可变性特性
- 不可变:字面常量一旦定义,其值就不能被修改。这是常量的基本特性。
package main
import "fmt"
func main() {
const num = 10
// num = 20 // 这行会报错,不能修改常量的值
fmt.Println(num)
}
总之,Go语言的字面常量在类型上灵活推导,作用域根据声明位置而定,且具有不可变性,这些特性使得代码更具可读性和安全性。