Поиск…


замечания

Go поддерживает константы символов, строковых, логических и числовых значений.

Объявление константы

Константы объявляются как переменные, но с использованием ключевого слова const :

const Greeting string = "Hello World"
const Years int = 10
const Truth bool = true

Как и для переменных, имена, начинающиеся с буквы верхнего регистра, экспортируются ( общедоступны ), имена, начинающиеся с нижнего регистра, не являются.

// not exported
const alpha string = "Alpha"
// exported
const Beta string = "Beta"

Константы могут использоваться как любая другая переменная, за исключением того факта, что значение не может быть изменено. Вот пример:

package main

import (
    "fmt"
    "math"
)

const s string = "constant"

func main() {
    fmt.Println(s) // constant

    // A `const` statement can appear anywhere a `var` statement can.
    const n = 10
    fmt.Println(n)                           // 10
    fmt.Printf("n=%d is of type %T\n", n, n) // n=10 is of type int

    const m float64 = 4.3
    fmt.Println(m) // 4.3

    // An untyped constant takes the type needed by its context.
    // For example, here `math.Sin` expects a `float64`.
    const x = 10
    fmt.Println(math.Sin(x)) // -0.5440211108893699
}

Детская площадка

Объявление нескольких констант

Вы можете объявить несколько констант в одном и том же блоке const :

const (
    Alpha = "alpha"
    Beta  = "beta"
    Gamma = "gamma"
)

И автоматически увеличивайте константы с помощью ключевого слова iota :

const (
    Zero = iota // Zero == 0
    One         // One  == 1
    Two         // Two  == 2
)

Дополнительные примеры использования iota для объявления констант см. В разделе Iota .

Вы также можете объявить несколько констант, используя множественное присвоение. Однако этот синтаксис может быть труднее прочитать, и его обычно избегают.

const Foo, Bar = "foo", "bar"

Типированные или нетипизированные константы

Константы в Go могут быть напечатаны или неттипированы. Например, с учетом следующего строкового литерала:

"bar"

можно сказать, что тип литерала - это string , однако это не является семантически правильным. Вместо этого, литералы являются Untyped строковыми константами . Это строка (вернее, ее тип по умолчанию - string ), но она не является значением Go и поэтому не имеет типа, пока она не будет назначена или не будет использована в заданном контексте. Это тонкое различие, но полезно понять.

Аналогично, если мы присваиваем литерал константе:

const foo = "bar"

Он остается нетипизированным, поскольку по умолчанию константы являются нетипизированными. Можно также объявить его как типизированную строковую константу :

const typedFoo string = "bar"

Разница вступает в игру, когда мы пытаемся назначить эти константы в контексте, который имеет тип. Например, рассмотрим следующее:

var s string
s = foo      // This works just fine
s = typedFoo // As does this

type MyString string
var mys MyString
mys = foo      // This works just fine
mys = typedFoo // cannot use typedFoo (type string) as type MyString in assignment


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow