構造体の定義と利用
構造体リテラル、フィールドアクセス、埋め込み
「構造体の定義と利用」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
構造体とは
構造体は、異なる型の関連フィールドを1つの名前付き型にまとめたものです。Goでカスタムデータ構造を定義する主要な仕組みであり、継承はありませんがクラスに似ています。
構造体の宣言
typeキーワードを使用して構造体型を定義します。
package main
import "fmt"
type Person struct {
Name string
Age int
City string
}
func main() {
p := Person{Name: "Alice", Age: 30, City: "London"}
fmt.Println(p)
}構造体リテラル
方法は2つあります。名前付きフィールドを使う方法(推奨)と、位置に依存する方法(順序に依存するため壊れやすい)です。
package main
type Point struct{ X, Y int }
func main() {
p1 := Point{X: 1, Y: 2} // named — preferred
p2 := Point{3, 4} // positional — avoid in non-test code
_ = p1; _ = p2
}フィールドへのアクセス
ドット記法を使用してフィールドを読み書きします。
package main
import "fmt"
type Car struct{ Brand string; Speed int }
func main() {
c := Car{Brand: "Tesla", Speed: 200}
fmt.Println(c.Brand) // Tesla
c.Speed = 250
fmt.Println(c.Speed) // 250
}構造体のゼロ値
構造体のゼロ値では、すべてのフィールドがそれぞれのゼロ値に設定されます。初期化しなくても安全に使用できます。
package main
import "fmt"
type Config struct{ Debug bool; Port int; Host string }
func main() {
var cfg Config
fmt.Println(cfg) // {false 0 }
cfg.Port = 8080
fmt.Println(cfg) // {false 8080 }
}構造体の比較
すべてのフィールドが比較可能であれば、構造体は==で比較できます。
package main
import "fmt"
type Point struct{ X, Y int }
func main() {
a := Point{1, 2}
b := Point{1, 2}
c := Point{3, 4}
fmt.Println(a == b) // true
fmt.Println(a == c) // false
}構造体は値型
構造体を代入すると、すべてのフィールドがコピーされます。コピーを変更しても元の構造体には影響しません。
package main
import "fmt"
type Rect struct{ W, H int }
func main() {
r1 := Rect{10, 20}
r2 := r1
r2.W = 99
fmt.Println(r1) // {10 20}
fmt.Println(r2) // {99 20}
}ネストした構造体
構造体のフィールド自体を構造体にすることもできます。
package main
import "fmt"
type Address struct{ City, Country string }
type Employee struct {
Name string
Age int
Address Address
}
func main() {
e := Employee{Name: "Bob", Age: 28, Address: Address{"Berlin", "DE"}}
fmt.Println(e.Address.City) // Berlin
}エクスポートフィールドと非エクスポートフィールド
大文字で始まるフィールドはエクスポートされます(公開)。小文字で始まるフィールドは非エクスポートです(パッケージ内限定)。
package main
type config struct {
host string // unexported
Port int // exported
}
func main() {
c := config{host: "localhost", Port: 8080}
_ = c
}構造体タグ
構造体タグはメタデータを提供します(例: JSONエンコード)。フィールドの型の後に文字列リテラルとして記述します。
package main
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email,omitempty"`
}
func main() { _ = User{} }簡単な確認
構造体内のboolフィールドのゼロ値は何ですか。
まとめ: 構造体
要点:
- 構造体は関連するフィールドを名前付き型にまとめます
- 名前付きフィールドのリテラルを使用し、位置指定は避けます
- 構造体は値型なので、代入するとコピーされます
- 大文字で始まるフィールドはエクスポートされます
- 構造体タグによって、encoding/jsonなどのライブラリ向けのメタデータを追加できます
練習問題
Name string、Price float64、InStock boolのフィールドを持つProduct構造体を定義してください。2つのインスタンスを作成し、==で比較して、その結果を出力してください。
よくある質問
「構造体の定義と利用」レッスンは無料ですか?
はい。「構造体の定義と利用」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「構造体の定義と利用」で何を学びますか?
構造体リテラル、フィールドアクセス、埋め込み ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「構造体の定義と利用」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 構造体の定義と利用
- 構造体のメソッド
- コンストラクターパターン
- 匿名構造体とコンポジション