Go 语言常量

正如名称“ CONSTANTS”所暗示的意思是固定的,在编程语言中也是如此,即,一旦定义了常量的值,就无法再对其进行修改。常量可以有任何基本数据类型,例如整数常量,浮点常量,字符常量或字符串文字。

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

package main

import "fmt"

const PI = 3.14

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

输出:

Hello nhooo
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,十进制为0。

  • 整数字面量也可以具有后缀,分别是U(大写)和L(大写)的组合,分别表示无符号和长整数。

  • 它可以是十进制,八进制或十六进制常量

  • 一个int最多可以存储64位整数,有时更少。

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

85         /* decimal */
0213       /* octal */
0x4b       /* 十六进制 */
30         /* int */
30u        /* unsigned int */
30l        /* long */
30ul       /* unsigned long */
212         /* 合法 */
215u        /* 合法 */
0xFeeL      /* 合法 */
078         /* 非法的:8不是八进制数字 */
032UU       /* 非法的:不能重复后缀 */

复数常量:
复数常量的行为与浮点常量非常相似。它是整数常数(或参数)的有序对实数对,并且该常数用逗号分隔,并且该对包含在括号之间。第一个常数是实部,第二个常数是虚部。复数常量COMPLEX * 8使用8个字节的存储空间。

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

浮动类型常量:

  • 浮点型常量具有一个整数部分,一个小数点,一个小数部分和一个指数部分

  • 可以用十进制或指数形式表示浮点常量。

  • 虽然用十进制形式表示,必须包含小数点,指数,或两者兼而有之。

  • 并且在使用指数形式表示时,必须包括整数部分,小数部分或两者。

以下是浮点类型常量的示例:

3.14159       /* 合法 */
314159E-5L    /* 合法 */
510E          /* 非法:不完整的指数 */
210f          /* 非法:没有小数或指数 */
.e55          /* 非法:缺少整数或分数 */

字符串文字

  • Go支持两种类型的字符串文字,即“”(双引号样式)和“”(反引号)。

  • 字符串可以级联++ =运算符。

  • 字符串包含与字符字面量相似的字符:纯字符,转义序列和通用字符,这是无类型的。

  • 字符串类型的零值是空白字符串,可以用或以文字表示。 " " ''

  • 通过使用==,!=和(用于比较相同类型)等运算符可比较字符串类型

语法

type _string struct {
    elements *byte // 底层字节
    len      int   //字节数
}

显示字符串文字的示例:
"hello, nhooo"

"hello, \

nhooo"

"hello, " "geeks" "forgeeks"

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

package main

import "fmt"

func main() {
    const A= "GFG"
    var B = "nhooo"
    
    //拼接字符串
    var helloWorld = A+ " " + B
    helloWorld += "!"
    fmt.Println(helloWorld) 
    
    //比较字符串
    fmt.Println(A == "GFG")   
    fmt.Println(B < A) 
}

输出:

GFG nhooo!
true
false

布尔常量:
布尔常量类似于字符串常量。它应用与字符串常量相同的规则,不同之处仅在于它具有两个未类型化的常量true和false。

package main

import "fmt"

const Pi = 3.14

func main() {
    const trueConst = true
    type myBool bool
    var defaultBool = trueConst       // 允许
    var customBool myBool = trueConst // 允许

    //  defaultBool = customBool // 不允许

    fmt.Println(defaultBool)
    fmt.Println(customBool)

}

输出:

true
true