ドットインストール - 3分動画でマスターできるプログラミング学習サービス
レッスン一覧
料金プラン
レッスン一覧
料金プラン
ログイン
運営からのお知らせ
2025/08/28
NEW
【週刊ドットインストール】 Figma入門を制作中、256timesの新クラスを企画中
PREMIUM
Go言語入門 データ型編
Go言語におけるデータ型の使い方について見ていきます。
0%
このレッスンをはじめる前に
このレッスンを進めるには前提知識が必要です。先に以下のレッスンを完了しておきましょう。
Go言語入門 基礎文法編
(全16回)
PREMIUM
PREMIUM
0%
Go言語入門 制御構造編
(全14回)
PREMIUM
PREMIUM
0%
Go言語入門 関数編
(全12回)
PREMIUM
PREMIUM
0%
Go言語入門 データ構造編
(全18回)
PREMIUM
PREMIUM
0%
Go言語入門 ポインタ編
(全9回)
PREMIUM
PREMIUM
0%
動画レッスン一覧
(14)
ミニクイズ
10
#01 カスタム型を使ってみよう
(03:00)
無料公開中
今回扱うトピック、カスタム型、メソッド、構造体の合成、インターフェース
カスタム型、同じstring型でも、違う型として定義できる
type nameString string、string型をベースにnameStringというデータ型を定義
カスタム型は変数、関数で型として使える
関数の引数でカスタム型指定すると、その型の値だけを受け付ける
未完了
#02 メソッドを定義してみよう
(01:56)
無料公開中
メソッド、特定のデータ型専用で定義した関数のこと
メソッドは、typeを使ったカスタム型、構造体などのデータ型に設定できる
レシーバー、メソッド定義時に書いた部分、(n nameString)
定義、func (n nameString) showProductInfo() {}
関数を呼び出した値、nを関数内で使える
実行、productName.showInfo()、データ型の値に.をつけて、呼び出す
未完了
#03 メソッドを増やしてみよう
(02:52)
無料公開中
メソッドを追加
func (n nameString) update(newName string) {}
型が違うと代入ができない
引数で受け取った値を特定の型に変換する、nameString(newName)
メソッドで渡されるレシーバー(n)は値のコピーが渡される
関数の中でnを更新しても変化なし、そのため更新後の値を返して再代入
未完了
#04 ポインタレシーバーを使ってみよう
(01:28)
前回の処理をポインタで書き換える
func (n *nameString) update(newName string) {*n = nameString(newName)}
レシーバーの値を書き換えない時、値レシーバー、値のコピーを渡す、
レシーバーの値を書き換える時、ポインタレシーバー、値のポインタを渡す
未完了
#05 構造体にメソッドを定義してみよう
(02:46)
構造体にメソッドを追加する
構造体、type scoreType struct {}
合否を判定するメソッド、func (s scoreType) isPassed() bool {}
結果の表示、fmt.Println(englishScore.isPassed())
未完了
#06 構造体の合成をしてみよう
(02:24)
構造体の合成、scoreTypeのフィールドやメソッドは別の構造体でも使える
type studentType struct {score scoreType}
taro := studentType{}、変数を定義、カンマのつけ忘れに注意
値の表示、fmt.Println(taro.score.points)
メソッド実行結果の表示、fmt.Printlm(taro.score.isPassed())
未完了
#07 埋め込みフィールドを使ってみよう
(02:06)
埋め込みフィールド、名前を省いて埋め込まれているフィールドのこと
埋め込みフィールドは親の構造体へ昇格、そこから直接呼び出せる
type studentType struct {scoreType}
値の表示、fmt.Println(taro.points)
メソッド実行結果の表示、fmt.Printlm(taro.isPassed())
Go言語では型の継承はない、studentTypeとscoreTypeは同じ型ではない
異なるデータ型でも、同じデータ型として扱いたい場合、インターフェースを活用する
未完了
#08 データ型ごとにメソッドを定義しよう
(01:54)
インターフェースの使い方を確認するための準備
英語と数学のカスタム型を作成、それぞれに合否判定メソッドを定義
レシーバーが異なれば、同じ名前のメソッドを宣言可能
e >= 80で条件分岐も可能だが、書き換え不可の場合もある
条件式が真偽値として評価されるため、return e>= 80でOK
未完了
#09 isPassedメソッドの結果を確認しよう
(02:06)
英語、数学のカスタム型の変数を宣言
データ型をあわせる、englishScore := englishScoreType(90)
結果を表示、fmt.Println(englishScore.isPassed())
true、falseにあわせてPass、Failを表示したい→次回
未完了
#10 インターフェースを定義してみよう
(02:39)
実行結果をわかりやすく表示するための関数を追加(Pass、Fail)
仮引数に2つのデータ型を書くことはできない
同じ名前のメソッドを持っていたら、自動的に同じデータ型とみなす仕組み、インターフェース
type passChecker interface {isPassed() bool}
func showResult(score passChecker) {true、falseに応じて表示を変える}
showResult(englishScore)
未完了
#11 空のインターフェースを使ってみよう
(02:17)
共通のメソッドがない場合の例
空のインターフェース、interface{}、any
0個以上のメソッドを実装したデータ型、つまりすべてのデータ型を受け取る
func showResult(score interface{}) {}
func showResult(score any) {}
scoreの結果エラー、ベースのデータ型がわからない、比較演算子が動作しない
未完了
#12 型アサーションを使ってみよう
(02:17)
前回の続き、関数の中で受け取ったスコアがどの型なのか調べて条件分岐していく
1つ目の方法、型アサーションで実装
scoreをenglishScore型として扱う
カンマOKイディオム、v, ok := score.(englishScoreType)
v、値
ok、englishScore型だとtrue、そうでなければfalseを返す
書き換え if v, ok := score.(mathScoreType); ok {...}
未完了
#13 返り値なしのreturnを使ってみよう
(01:26)
型アサーションの続き、コードを実行すると結果がおかしいので修正
現状、2つの条件判定がされ、Invalid Scoreも表示される
改善、条件判定後処理を止めて呼び出し元に戻す、returnを追加
returnに値を指定しない場合、関数の返り値の型を書く必要はない
未完了
#14 型switchを使ってみよう
(02:02)
2つ目の方法、型switchで実装
switch v := score.(type) {case englishScoreType: ... default: ...}
score.(type)をvで受け、switchの中で使用可能
未完了
#01 カスタム型を使ってみよう
1
#02 メソッドを定義してみよう
1
#03 メソッドを増やしてみよう
1
#04 ポインタレシーバーを使ってみよう
1
#05 構造体にメソッドを定義してみよう
1
#06 構造体の合成をしてみよう
ミニクイズなし
#07 埋め込みフィールドを使ってみよう
1
#08 データ型ごとにメソッドを定義しよう
ミニクイズなし
#09 isPassedメソッドの結果を確認しよう
ミニクイズなし
#10 インターフェースを定義してみよう
1
#11 空のインターフェースを使ってみよう
1
#12 型アサーションを使ってみよう
1
#13 返り値なしのreturnを使ってみよう
ミニクイズなし
#14 型switchを使ってみよう
1
次におすすめのレッスン
Go言語入門 並行処理編
(全16回)
PREMIUM
PREMIUM
0%
リリース情報(note)
『Go言語入門 データ型編』をリリースしました
詳細情報
最終更新日
2024年10月28日
バージョン情報
Go 1.23.0