基本的なデータの扱い方と種類[Go言語入門]

プログラムは大きく分けて2つの部分から成り立っており、それはデータ部分と処理部分です。

例えば、当ブログはGo言語で動作しており、ユーザーからのアクセスがあると URL から返却すべき記事データを探しています(処理)。そして、該当する記事データ(データ)があればユーザーに送信してユーザーは記事を読むことができます。

今回はそんなデータの基本中の基本をご紹介します。

コンテンツの転載は固くお断りいたします。

コード例

まずはコードを御覧ください。以下のコードは『初めてのGo言語プログラム!』と表示するだけのものです。


package main

import "fmt"

// main関数
func main() {
	// 宣言
	var m string

	// 代入
	m = "初めてのGo言語プログラム!"

	// 関数の引数に指定して表示
	fmt.Println(m)
}

データの扱い方

それでは、基本的なデータの扱い方を見ていきましょう。

データには名前を付けておく『宣言』


// 宣言
var m string

文字列や数値やその他のデータを保管しておくためには、そのデータに名前を付けておく必要があります。それを宣言と言いますが、宣言をする形式は『var データの名前 データの種類』となります。

上のコードの場合ですと、行の最初に『var』と書いてデータの宣言であることを明記し、次に『m』と書いてデータを識別するための名前を『m』としています。

そして最後に『string』と書いていますが、これはデータの種類が文字列であることを表しています。

宣言をしたらデータそのものを『代入』して放り込んでおこう


// 代入
m = "初めてのGo言語プログラム!"

上のように、先程宣言したデータ『m』に対して『=』で文字列を代入することが出来ます。文字列は『”』で囲んでおきましょう。

『m』は後から何度でも新しく文字列を代入することが可能で、こういったデータを『変数』と呼びます。

関数の引数としてデータを渡す


// 関数の引数に指定して表示
fmt.Println(m)

今まで Println関数には『”』で囲んだ文字列を直接渡して表示させていましたが、『()』の中に『m』とだけ書き、データの名前を渡すことでも表示が可能です。

こう書いた場合でも『初めてのGo言語プログラム!』と表示させることが可能です。

変更不可なデータは『定数』にする


const m = "一度初期化すると代入は出来ない"

// m = "エラーになる"

プログラミングをしていると、初期化したデータを代入などで自由に変更されてしまうと不便な状況も発生してきます。

そういった場合は『var』で変数を宣言するのではなく、『const』と書いて『定数』の宣言としておきましょう。定数は一度初期化すると代入などを行うことが出来ません。

宣言方法いろいろ

宣言方法は最初でご紹介した方法以外にもいくつかあり、それらをご紹介していきます。

複数を同時に宣言


// 宣言
var m, s string

// 代入
m = "初めてのGo言語プログラム!"
s = "2つ目"

上のように宣言したいデータが複数あり、それらが同じ種類のデータであるなら、データ名を『,』で区切ることで1行で複数の宣言を同時に行うことが可能です。

宣言と同時にデータの初期化も行う


var m = "初めてのGo言語プログラム!"

宣言と同時にデータの初期化も行うのであれば、『var データ名 = データ』と書きます。この場合、データの種類は自動的に推測されますので、データの種類を書く必要はありません。

複数の場合


var m, s string = "文字列1", "文字列2"

宣言と初期化が同時で、更に複数の場合は始めに『var データ名1,データ名2 種類』という風に『,』で区切って複数を指定しつつ、種類も書きます。

そして『=』で初期値を設定するのですが、これも『,』で区切ります。上の例ですと『文字列1』というデータは『m』に入り、『文字列2』は『s』に入ります。

宣言と初期化を同時にしつつ、宣言を省略する


m := "文字列"

代入する際は『=』を使いますが、『:=』と書くことで宣言と代入を同時に行うことが出来ます。更にこの形式だとデータの種類は書かなくても自動的に決定されます。

上の例だと、文字列で初期化をしたので『m』のデータの種類は文字列となります。

データの種類いろいろ

基本的なデータの種類は以下のようなものがあります。

種類 書き方
文字列 string
整数 int
32ビット小数 float32
64ビット小数 float64
論理値 bool

整数


var i, j, k, l int = 123, -2345, 34567, -456789

データの種類が文字列の場合は『string』でしたが、整数なら『int』と書きます。

文字列のように『”』などで囲む必要はなく、数値をそのまま書くことができ、マイナスであれば『-』を付けておきます。

小数


var i, j float32 = 1.23, -2.34
var k, l float64 = 3.45, -0.456789

小数値なら『float32』と『float64』があり、float32 より float64 の方が扱える数値の範囲が広くなります。

範囲が広い float64 の方が優れているように感じるかもしれませんが、小数値の計算速度、データサイズの違いなどがあり、それらは動作環境によっても異なるので判断は難しいものであります。

『m := 1.2』のように宣言と初期化を行うと『m』は『float』という種類になります。

論理値


var t, f bool = true, false

『true』か『false』のどちらかだけを設定できる『bool』という種類もあります。初期化や代入するときはそのまま『true』か『false』と書きます。

条件に応じて処理を分岐させる場合に便利なものです。

データを扱う際の注意点

データを扱う際の注意点をいくつか書いていきます。

同じブロック内で同じデータ名の宣言は出来ない


d := "初期化"

d := "同じ名前は二度宣言できない" // エラーになる

main関数などでは『{ }』で囲った中が処理部分になり、それを『ブロック』と呼びますが、同じブロック内で同じデータ名の宣言は出来ません。

上の例がそうであり、最初に『d』という名前で文字列を宣言し、次に再び『d』という名前で宣言をしようとしています。しかし、これはエラーとなります。

違う種類のデータは代入できない


d := "初期化"

d = 123 // エラーになる

文字列として宣言したデータに数値や論理値を代入することは出来ません。文字列として宣言したのなら文字列しか代入は出来ません。

宣言したデータは同じブロック内でしか使えない


func test() {
	fmt.Println(m)
}

// main関数
func main() {
	m := "これはmain関数内でしか使えない!"
}

上のコードのように、main関数とは別に test関数があったとします。main関数で『m』という変数が宣言されており、test関数でその変数m を使おうとしています。

しかし、main関数と test関数は別ブロックですので、test関数内で変数m を使用することは出来ません。

さいごに

状況に応じて宣言方法やデータの種類を使い分け、よきGo言語ライフを!