🗳️

変数とデータ型 ( Go入門連載 第2回)

2021/03/06に公開

シリーズの目次

  1. Goの導入 for MacOS
  2. パッケージ
  3. 変数とデータ型
  4. 条件分岐
  5. ループ処理
  6. 配列
  7. 関数

変数とデータ型

変数を利用するには、まず変数を定義する必要があります。
下の例のように var 変数名 データ型 と書くことで、変数を定義していきます。

varvariableの略です。variableは英語で「変数」という意味です。

var number int
var name string

また、他言語と同様にGo言語でも変数の宣言と代入を同時に行うことが可能です。

var number int = 100

データ型の省略

Goでは、var number int = 100 のように、変数の定義と値の代入を同時に行う場合、データ型の指定を省略することができます。
下の例では var number = 100 と intが省略されています。これは 100 が整数である為、そこから 変数 number に代入される型がint型であることが明らかだからです。

var number = 100

変数の定義の省略

データ型を省略した変数の定義はさらに省略した書き方が可能です。
下の例のように、 number := 100 とすることで var number int = 100 と同じ意味になります。こうすることにより var を省略して変数の初期化を行うことができます。

number := 100

複数の変数を同時に初期化

Go言語では ,(カンマ) で区切ることで複数の変数を同時に初期化することができます。

i, j, c, python, java := 1, 2, true, false, "no!"
fmt.Println(i, j, c, python, java) // => 1 2 true false no!

また以下のような形でも宣言可能。

func main() {
    var (
        name = "namae"
	country = "japan"
	city = "fukuoka"
    )
}

変数のゼロ値

変数の宣言時に、明示的に値を指定しない時はゼロ値がコンパイラによって設定されます。

ゼロ値
intやfloat64, rune 0
string ""
bool false
error nil

定数

  • コンパイル時から値が変わらないものが定数
  • 再代入できない
  • 方を明示しない場合、デフォルト型になる
種類 デフォルト型
整数 100 int
浮動小数点 1.5 float64
複素数 1+4i complex128
ルーン 'A', '世' rune
文字列 "hoge" string
真偽値 true bool

定数の宣言方法

  • 『const 定数名 データ型 = 値』
  • 『const 定数 = 値』
func main() {
    const name string = "namae"
    const country = "japan"
    
    println(name, country) // => namae japan
}

出力

Print

Print関数は引数として受け取った値をそのまま出力します。
以下がその例です。

// Printの場合は、スペースも改行も挿入されない
fmt.Print("Hello", "world!")
fmt.Print("Hello", "world!")
> Helloworld!Helloworld!

Println

Println関数も基本的にはPrintと同様ですが、出力結果の末尾に改行が付与されます。
また、複数の引数を渡した場合は、その間にスペースを挿入して出力します。

// Printlnの場合は、スペースと改行が挿入される
fmt.Println("Hello", "world!")
fmt.Println("Hello", "world!")
> Hello world!
> Hello world!

入力

  • 単一の数値入力
var N int
fmt.Scan(&N)
  • 単一の文字列入力
var s string
fmt.Scan(&s)
  • 複数の入力を受け取る
var a, b int
var s string
fmt.Scan(&a, &b, &s)

演習問題

文法だけ読んでも実際に書いていかないと覚えれない部分もあると思うので、AtCoderの問題をGo言語で解いていきます。

今回の演習ではこの問題を解いていきましょう!!
https://atcoder.jp/contests/abc082/tasks/abc082_a

提出する際は「言語」と書かれた場所の隣に「Go (GCC 1.14.1)」と表示されていることを確認し、「提出」ボタンを押してください。

回答例 (わからなかった場合のみご確認ください)
package main

import "fmt"

func main() {
    var a, b int
    fmt.Scan(&a, &b)
    fmt.Println((a + b + 1) / 2)
}

Discussion