📜  常量 – Go 语言

📅  最后修改于: 2021-10-24 13:25:13             🧑  作者: Mango

正如名称CONSTANTS 所暗示的意思是固定的,在编程语言中也是一样的,即,一旦定义了常量的值,就不能进一步修改。可以有任何基本的常量数据类型,如整数常量、浮点常量、字符常量或字符串字面量。

怎么申报?
常量像变量一样声明,但使用的是const 关键字作为前缀来声明具有特定类型的常量。它不能使用:=语法声明。

例子:

Go
package main
 
import "fmt"
 
const PI = 3.14
 
func main()
{
    const GFG = "GeeksforGeeks"
    fmt.Println("Hello", GFG)
 
    fmt.Println("Happy", PI, "Day")
 
    const Correct= true
    fmt.Println("Go rules?", Correct)
}


Go
package main
 
import "fmt"
 
func main()
{
    const A = "GFG"
    var B = "GeeksforGeeks"
     
    // Concat strings.
    var helloWorld = A+ " " + B
    helloWorld += "!"
    fmt.Println(helloWorld)
     
    // Compare strings.
    fmt.Println(A == "GFG")  
    fmt.Println(B < A)
}


Go
package main
 
import "fmt"
 
const Pi = 3.14
 
func main()
{
    const trueConst = true
     
    // Type definition using type keyword
    type myBool bool   
    var defaultBool = trueConst // allowed
    var customBool myBool = trueConst // allowed
     
    //  defaultBool = customBool // not allowed
    fmt.Println(defaultBool)
    fmt.Println(customBool)  
}


输出:

Hello GeeksforGeeks
Happy 3.14 Day
Go rules? true

无类型和有类型的数字常量:
类型常量就像不可变变量一样只能与相同类型互操作,而无类型常量像字面量一样可以与相似类型互操作。在 Go 中,可以使用或不使用类型来声明常量。以下是显示命名和未命名的类型化和非类型化数字常量的示例。

const untypedInteger          = 123
const untypedFloating typed   = 123.12

const typedInteger  int             = 123
const typedFloatingPoint   float64  = 123.12

以下是 Go 语言中的常量列表:

  • 数字常量(整数常量、浮点常量、复数常量)
  • 字符串字面量
  • 布尔常量

数字常数:
数字常量是高精度值。由于 Go 是一种静态类型语言,不允许混合数字类型的操作。您不能将float64添加到int ,甚至是int32 int 。虽然,写1e6*time.Secondmath.Exp(1)甚至1<<(‘\t’+2.0)是合法的。在 Go 中,常量与变量不同,其行为类似于常规数字。

数字常量可以是 3 种类型,即整数、浮点数、复数

整数常数:

  • 前缀指定基数或基数:十六进制为 0x 或 0X,八进制为 0,十进制为空。
  • 整数字面量也可以有一个后缀,它是 U(大写)和 L(大写)的组合,分别用于 unsigned 和 long
  • 它可以是十进制、八进制或十六进制常量
  • int 最多可以存储 64 位整数,有时更少。

以下是整数常量的一些示例

85         /* decimal */
0213       /* octal */
0x4b       /* hexadecimal */
30         /* int */
30u        /* unsigned int */
30l        /* long */
30ul       /* unsigned long */
212         /* Legal */
215u        /* Legal */
0xFeeL      /* Legal */
078         /* Illegal: 8 is not an octal digit */
032UU       /* Illegal: cannot repeat a suffix */

复数常数:
复杂常量的行为很像浮点常量。它是整数常量(或参数)的有序对实对,常量之间用逗号隔开,一对用括号括起来。第一个常数是实部,第二个是虚部。复杂常量 COMPLEX*8 使用8 个字节的存储空间。

例子:

(0.0, 0.0) (-123.456E+30, 987.654E-29)

浮动类型常量:

  • 浮点型常量具有整数部分、小数点、小数部分和指数部分
  • 可以以十进制形式或指数形式表示浮动常量。
  • 使用十进制形式表示,必须包含小数点,指数,或两者兼而有之。
  • 并且在使用指数形式表示时,必须包括整数部分、小数部分或两者。

以下是 Floating 类型常量的示例:

3.14159       /* Legal */
314159E-5L    /* Legal */
510E          /* Illegal: incomplete exponent */
210f          /* Illegal: no decimal or exponent */
.e55          /* Illegal: missing integer or fraction */

字符串字面量

  • Go 支持两种类型的字符串字面量,即“”(双引号样式)和 ‘ ‘(反引号)。
  • 字符串可以与++ =运算符被级联
  • 一个字符串包含类似于字符字面量字符:普通字符,转义序列,和通用的字符。而这是无类型。
  • 字符串类型的零值是空字符串,在字面量可以用“”“”表示。
  • 字符串类型都可以通过使用==、!=和(用于比较相同类型)等运算符进行比较

句法

type _string struct {
    elements *byte // underlying bytes
    len      int   // number of bytes
}

显示字符串字面量的示例:

"hello, geeksforgeeks" 

"hello, \ 

geeksforgeeks" 

"hello, " "geeks" "forgeeks" 

在这里,以上三个语句都是相似的,即它们没有任何特定的类型。

例子:

package main
 
import "fmt"
 
func main()
{
    const A = "GFG"
    var B = "GeeksforGeeks"
     
    // Concat strings.
    var helloWorld = A+ " " + B
    helloWorld += "!"
    fmt.Println(helloWorld)
     
    // Compare strings.
    fmt.Println(A == "GFG")  
    fmt.Println(B < A)
}

输出:

GFG GeeksforGeeks!
true
false

布尔常量:
布尔常量类似于字符串常量。它应用与字符串常量相同的规则。区别仅在于它有两个无类型常量 true 和 false。

package main
 
import "fmt"
 
const Pi = 3.14
 
func main()
{
    const trueConst = true
     
    // Type definition using type keyword
    type myBool bool   
    var defaultBool = trueConst // allowed
    var customBool myBool = trueConst // allowed
     
    //  defaultBool = customBool // not allowed
    fmt.Println(defaultBool)
    fmt.Println(customBool)  
}

输出:

true
true