変数とデータ型 ( Go入門連載 第2回)
シリーズの目次
変数とデータ型
変数を利用するには、まず変数を定義する必要があります。
下の例のように var 変数名 データ型
と書くことで、変数を定義していきます。
var
はvariable
の略です。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の場合は、スペースも改行も挿入されない
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言語で解いていきます。
今回の演習ではこの問題を解いていきましょう!!
提出する際は「言語」と書かれた場所の隣に「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