Golang 常量


2022年1月2日, Learn eTutorial
2369

在本 Golang 教程中,您将学习有关 Go 常量的所有知识。Golang 常量与变量类似,不同之处在于一旦将变量声明为常量,就无法更改其值。在本教程中,您将深入了解 Go 中的常量是什么,用于常量变量声明的不同语法、命名约定、常量类型及其多重声明。

什么是 Golang 常量?

Go 编程语言常量是一个值保持不变的变量。分配的值对于常量变量保持固定或不变,直到 Golang 程序成功执行或用户更改变量的分配值为止。Go 语言是只读的,不能修改。

Go 常量如何声明?

在 Go 编程语言中,常量变量的声明与其他变量声明一样简单易行,正如我们在之前的教程中讨论过的那样。

  • 关键字 const 将 Go 编程语言中的变量声明为常量。
  • 关键字 const 后跟变量名及其类型,以标识常量变量存储的值的类型。

Go 常量的语法

语法 1


Const  <variable_name> <type> = <value>


const PLACE string = "Europe"
const street_no int = 3456

该语法声明了一个常量变量,其变量名为 PLACE、street_no,并根据常量变量持有的值类型为其赋值。

程序 1:使用语法 1


package main
import "fmt"

const PLACE string = "Europe"
const street_no int =3456

func main() {
 fmt.Println(PLACE)
 fmt.Println(street_no)
}

  • 关键字 const 使类型为字符串的 Europe 和整数类型为 3456 的数字在 Go 程序执行期间作为常量变量保持不变。
  • 此语法是显式类型。

输出


Europe
3456

语法 2:


Const  <variable_name> = <value>

在此语法中,常量变量的类型在程序执行时推断,无需预定义常量变量所包含变量值的类型。这里 const 关键字将变量声明为常量。此语法是隐式类型。


const PLACE1 = “Germany”
const street1 = 45

程序 2:使用语法 2


package main
import "fmt"

const PLACE1=”Germany”  //Type inferred
const street1  = 45     //Type inferred

func main() {
 fmt.Println( PLACE1)
 fmt.Println(street1)
}

  • PLACE1 是类型为字符串的常量变量,其变量在内存位置存储“Germany”作为其值。
  • street1 是另一个整数类型的常量变量,包含数字,例如 45。

输出


Germany
45

Golang 常量规则

  • 常量变量的命名约定与上一个教程中讨论的变量命名规则相同。
  • 大写字母通常用于表示常量变量,因为它们易于识别。
  • 常量变量可以在函数内部和外部声明。

Golang 常量有哪些类型?

Golang 常量有两种类型

  • 有类型
  • 无类型
  1. 有类型常量

    有类型常量是声明时带有特定类型的常量变量。有类型常量也称为**显式类型**。

    程序 3

    
    package main
    import ("fmt")
    /* const declared outside a function */
    const name string = "Typed Constant"
     func main() {
    fmt.Println( name)
    }
    
    

    输出

    
    Typed Constant
    
    • 一个类型为字符串的常量变量名,声明时赋值为“Typed constant”
    • 使用 const 关键字创建常量变量。
    • 指定了常量变量的类型,因此它属于有类型常量类别。
  2. 无类型常量

    无类型常量是声明时类型未知的常量变量。无类型常量也称为**隐式类型**。

    程序 4

    
    package main
    import ("fmt")
    /* const declared outside a function */
    const z = 100
    
    func main() {
       fmt.Println(z)
    }
    
    

    输出

    
    100
    
    • 使用 const 关键字声明了一个常量变量 z,其值为 100。
    • 常量的类型未定义,但在程序执行期间被识别。
    • 因此,变量的类型在代码编译期间被推断为整数类型,并显示结果输出为 100。
    • 所以它被称为无类型常量。

**注意:**在无类型常量的情况下,编译器决定常量变量的类型。

  • 程序 3 和程序 4 都是在函数外部声明常量变量的示例。
  • 考虑另一个在函数内部声明常量变量的示例

程序 5


package main
import ("fmt")

func main() {
/* const declared inside function */
          const value =10
          const z = 3.14
          const u = "Hi!"

           fmt.Println(value)
           fmt.Println(z)
           fmt.Println(u)
    
    }

如何声明多个 Golang 常量?

多个常量被分组到一个块中。使用以下语法定义多个常量变量

语法


Const (
 A = “ one“
 B = 90
 C = 78.90
 D = false 
)

**const** 关键字后跟括号“()”,括号内定义了被认为是常量的多个变量

程序 6


const (
 PRODUCT  = "Dress "
 QUANTITY = 2
 PRICE    = 1550.50
 STOCK  = true
)
package main
import "fmt"
const (
 PRODUCT  = "Dress "
 QUANTITY = 2
 PRICE    = 1550.50
 STOCK  = true
)
func main() {
 fmt.Println(QUANTITY)
 fmt.Println(PRICE)
 fmt.Println(PRODUCT)
 fmt.Println(STOCK)
}

输出


2
1550.5
Dress
true

常量变量可以重新声明吗?

不能,重新声明常量变量会导致编译错误。

让我们通过一个例子来理解


package main
import ("fmt")
func main() {
    const value =10
    const z = 3.14      //  z declared as constant
    const u = "Hi!"
    var z = 3          // z redeclared as variable

    fmt.Println(value)
    fmt.Println(z)
    fmt.Println(u)
    fmt.Println(z)
}

输出


#_/home/y4zQxY
./prog.go:8:9 z reclared in this book previous declaration at ./prog.go:6:15

**注意:**常量变量不能重新声明,否则会导致编译错误