MST

星途 面试题库

面试题:Go语言中Go字面常量有哪些主要特性

请详细阐述Go语言里字面常量在类型、作用域、可变性等方面的特性,并举例说明。
49.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

类型特性

  1. 类型推导: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
}
  1. 支持多种基础类型:支持整数、浮点数、复数、布尔值、字符串和符文(rune)等字面常量。例如:
const (
    numInt = 10
    numFloat = 3.14
    numComplex = 2 + 3i
    boolVal = true
    strVal = "hello"
    runeVal = 'a'
)

作用域特性

  1. 全局作用域:在包级别声明的字面常量具有全局作用域,可在包内任何地方访问。
package main

import "fmt"

const globalConst = "I'm a global constant"

func main() {
    fmt.Println(globalConst)
}
  1. 局部作用域:在函数内部声明的字面常量具有局部作用域,只能在该函数内访问。
package main

import "fmt"

func main() {
    const localConst = "I'm a local constant"
    fmt.Println(localConst)
}

可变性特性

  1. 不可变:字面常量一旦定义,其值就不能被修改。这是常量的基本特性。
package main

import "fmt"

func main() {
    const num = 10
    // num = 20 // 这行会报错,不能修改常量的值
    fmt.Println(num)
}

总之,Go语言的字面常量在类型上灵活推导,作用域根据声明位置而定,且具有不可变性,这些特性使得代码更具可读性和安全性。