1. ホーム
  2. スクリプト・コラム
  3. ゴラン

Go言語基本変数宣言・初期化例詳細

2022-01-06 04:23:40

I. 概要

変数の機能は、ユーザーに関するデータを保存することです

II. 変数の宣言

Goの各変数は独自の型を持っており、使い始める前に宣言する必要があります。

変数の宣言形式。

var <変数名> [変数の種類]を指定します。

 var a int // Declare a variable of type integer, which can hold integer values
 var b string // Declare a variable of type string
 var c float32 // Declare a variable of type 32-bit floating-point slice, which represents a data structure consisting of multiple floating-point types  
 var d func() bool // Declare a function variable with a boolean return value, which is generally used in callback functions
 var e struct{ // Declare a variable of type struct
      x int
  }



a.標準フォーマット

キーワードvarで始まり、変数の型が続き、行末にセミコロンはない

<ブロッククオート

var 変数名 変数型

b.バッチ形式

var (
    a int
    b string
    c float32
    d func() bool
    e struct {
        x int
    }
)


III. コンパイラ派生型のフォーマット [必ず割り当てること]。

型を省略した後、コンパイラは等号の右側の式に基づいて変数の型を導出しようとします。

var hp = 100


IV. 短い変数の宣言と初期化

型、varを省略し、=を=にする。
代入の際に "=" の代わりに ":=" が使われているので、推論された宣言文の左辺の変数は未定義の変数でなければなりません。
定義されている場合は、コンパイルエラーになります

xp := 10
fp,ap=20,30


V. 匿名変数 - 名前のない変数

多重代入を行う場合、左の値で変数を受け取る必要がなければ、無名変数を使うことができます。
匿名変数は、"_"のアンダースコアで表現されます。匿名変数を使用する場合は、変数が宣言されている場所のアンダースコアを置き換えるだけです。

a,_=10,20


VI. ノート

  • コンパイラが型を派生させるときは、[必ず値を割り当てる]。
  • 代入の際に "=" の代わりに ":=" を使用しているので、派生宣言に書かれている左値の変数は未定義の変数でなければなりません。定義されているとコンパイルエラーになります]。
  • 無名変数を使うには2つ以上の変数があった方が良い[そうでなければ意味がなくなる]。

VII. ケース

package main
import "fmt"
import "net"
func main() {
	/* I. Declaration*/
	var a int // Declare a variable of type integer, which can hold integer values
	var b string // Declare a variable of type string
	var c float32 // declare a variable of type 32-bit floating-point slice, which represents a data structure composed of multiple floating-point types
	var d func() bool // Declare a function variable with a boolean return value, which is generally used in callback functions
	var e struct { // Declare a variable of type struct
		x int
	}
	var f bool // Declare a boolean variable
	fmt.Printf("a type: %T, value: %v\n", a, a) //a type: int, value: 0
	fmt.Printf("b type: %T, value: %q\n", b, b) //b type: string, value: ""
	fmt.Printf("c type: %T, value: %v\n", c, c) //c type: float32, value: 0
	fmt.Printf("d type: %T, value: %v\n", d, d) //d type: func() bool, value: <nil>
	fmt.Printf("e type: %T, value: %v\n", e, e) //e type: struct { x int }, value: {0}
	fmt.Printf("f type: %T, value: %v\n", f, f) //f type: bool, value: false
	/* II. Bulk declaration */
	// var (
	// a int
	// b string
	// c float32
	// d func() bool
	// e struct {
	// x int
	// }
	// )

	// III. Format of compiler derived types [must be assigned, this is to be compiled for type derivation]
	var hp = 100
	fmt.Println(hp)	
	fp,ap:=20,30
	fmt.Println(fp,ap)
	// IV. Short variable declaration and initialization
	//hp := 10 //error no new variables on left side of := No new variables appear on the left side of ":=", meaning that the variables on the left side of ":=" have
	//Multiple short variable declarations [compiler will not report err duplicate]
	conn1, err := net.Dial("tcp", "127.0.0.1:8080")
	conn2, err := net.Dial("tcp", "127.0.0.1:8080")	
	fmt.Println(conn1,err)
	fmt.Println(conn2,err)	
	// V. Anonymous variables - variables without names
	a,_=10,20
}


以上、Go言語ベース変数の宣言と初期化について詳しく説明しました。