GoLang 変数と定数

この記事の一部は機械翻訳を使ってるよ

Golang シリーズ

Hello GoLang: https://blog.yexca.net/ja/archives/154
GoLang (var and const) 変数と定数: この記事
GoLang (func) 関数: https://blog.yexca.net/archives/ja/156
GoLang (slice and map) スライス: https://blog.yexca.net/ja/archives/160
GoLang (OOP) オブジェクト指向: https://blog.yexca.net/ja/archives/162
GoLang (reflect) リフレクション: https://blog.yexca.net/ja/archives/204
GoLang (struct tag) 構造タグ: https://blog.yexca.net/ja/archives/205
GoLang (goroutine) ゴルーチン: https://blog.yexca.net/ja/archives/206
GoLang (channel) チャンネル: https://blog.yexca.net/ja/archives/207

変数

変数は通常 var キーワードを使用して宣言されます

単一変数

  • タイプを定義する

初期値が指定されていない場合、デフォルトは 0 です。

package main

import "fmt"

func main() {
    var a int
    fmt.Println("a =", a)
}

初期値を指定します。a は 100 です。

package main

import "fmt"

func main() {
    var a int = 100
    fmt.Println("a =", a)
}
  • 省略タイプ

宣言時に型がわからない場合、Go は変数の型を自動的に決定します。

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var a = 100
    fmt.Println("a =", a)
    fmt.Printf("Type of a = %s", reflect.TypeOf(a))
}
  • :=

省略に応じて型が自動的に決定され、:= を使用して変数を直接宣言できます。

package main

import (
    "fmt"
    "reflect"
)

func main() {
    p := 3.14
    fmt.Println("p =", p)
    fmt.Printf("Type of p is %s", reflect.TypeOf(p))
}

/*
 * 出力
 * p = 3.14
 * Type of p is float64
 */

多変量

  • 同じタイプ
package main

import "fmt"

func main() {
   var a, b int
   fmt.Println("a =", a)
   fmt.Println("b =", b)
}
  • 同じタイプの割り当て
package main

import "fmt"

func main() {
   var a, b int = 100, 200
   fmt.Println("a =", a)
   fmt.Println("b =", b)
}
  • 異なるタイプ 1
package main

import (
    "fmt"
    "reflect"
)

func main() {
    var a, b = 100, 3.14
    fmt.Println("a =", a)
    fmt.Printf("Type of a is %s\n", reflect.TypeOf(a))
    fmt.Println("b =", b)
    fmt.Printf("Type of b is %s", reflect.TypeOf(b))
}

/*
 * 出力
 * a = 100
 * Type of a is int
 * b = 3.14
 * Type of b is float64
 */
  • 異なるタイプ 2
package main

import (
    "fmt"
    "reflect"
)

func main() {
    a, b := 100, "Hello"
    fmt.Println("a =", a)
    fmt.Printf("Type of a is %s\n", reflect.TypeOf(a))
    fmt.Println("b =", b)
    fmt.Printf("Type of b is %s", reflect.TypeOf(b))
}

Go の文字列型は、基になる配列へのポインタと長さを含む構造体です。これら 2 つの部分はそれぞれ 8 バイトなので、文字列型のサイズは 16 バイトになります。

unsafe.Sizeof()関数を使用して、タイプ占有率が見られます。

グローバル変数

グローバル変数は := を使用して宣言することはできません

package main

import (
    "fmt"
    "reflect"
)

var a, b int

func main() {
    fmt.Println("a =", a)
    fmt.Printf("Type of a is %s\n", reflect.TypeOf(a))
    fmt.Println("b =", b)
    fmt.Printf("Type of b is %s", reflect.TypeOf(b))
}

または、グローバル変数に一般的に使用される分解を使用します。

package main

import (
    "fmt"
    "reflect"
)

var (
    a int    = 1
    b string = "Go"
)

func main() {
    fmt.Println("a =", a)
    fmt.Printf("Type of a is %s\n", reflect.TypeOf(a))
    fmt.Println("b =", b)
    fmt.Printf("Type of b is %s", reflect.TypeOf(b))
}

定数

定数は通常、const キーワードを使用して定義されます。

定義

package main

import "fmt"

func main() {
    const c int = 9
    fmt.Println("c = ", c)
}

タイプを省略することもできます

package main

import "fmt"

func main() {
    const c = 9
    fmt.Println("c = ", c)
}

列挙

定数定義は列挙に使用できる

package main

func main() {
    const (
        BEIJING = 0
        SHANGHAI = 1
        SHENZHEN = 2
    )
}

iota 自己増加

上記の列挙は 0 から始まり、増分で増加します。代わりに iota を使用できます。

package main

import "fmt"

func main() {
    const (
        BEIJING = iota // 0
        SHANGHAI // 1
        SHENZHEN // 2
    )

    fmt.Println(BEIJING, SHANGHAI, SHENZHEN)
}

iota は式の中で使用できますが、通常は自動増分に使用されます

This post is licensed under CC BY-NC-SA 4.0 by the author.
最終更新 2025-01-28 14:57 +0900

Hugo で構築されています。 | テーマ StackJimmy によって設計されています。