サーチ…
備考
Goは、文字、文字列、ブール値、数値の定数をサポートしています。
定数の宣言
定数は変数のように宣言されますが、 const
キーワードを使用します:
const Greeting string = "Hello World"
const Years int = 10
const Truth bool = true
変数の場合と同様に、大文字で始まる名前はエクスポート( public )され、小文字で始まる名前はエクスポートされません。
// 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
であると言うかもしれませんが、これは意味的に正しいものではありません。代わりに、リテラルは型なしの文字列定数です。これは文字列です(より正確には、 デフォルトの型は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