いきなり全体のサンプル
いきなり全体のサンプルコード
package main
import "fmt"
type user struct {
name string
height int
gender string
}
func main() {
// 1. 初期化と値設定 別パターン
u1 := new(user)
u1.name = "織田"
u1.height = 170
u1.gender = "男"
fmt.Println(u1) // => &{織田 170 男}
// 2. 初期化と値設定 一気パターン
u2 := user{name:"徳川", height:180, gender:"男"}
fmt.Println(u2) // {徳川 180 男}
// 3. 初期化と値設定 さらに省略パターン
u3 := user{"豊臣", 165, "男"}
fmt.Println(u3) // => {豊臣 165 男}
}
構造体とは
すごいざっくり言うと、複数の値をグループにして定義することができるもの…みたいです。
フィールドの書き方
フィールドの書き方
type /*構造体の名前*/ struct {
/*データの名前*/ /*型*/
/*データの名前*/ /*型*/
/*データの名前*/ /*型*/
// こんな感じで、好きなだけ書く
}
フィールドのサンプル
type user struct {
name string
height int
gender string
}
1.実際に使う(初期化と値設定 別パターン)
まず初期化する
初期化の書き方
func /*何かのメソッドの中*/() {
/*変数名*/ := new( /*構造体の名前*/ )
}
初期化のサンプル
func main() {
u1 := new(user)
}
ちなみに、この時点では0
や(空文字)が入って初期化され、ポインタで返されている。
次にフィールドに値を設定する
フィールドへの値設定の書き方
func /*何かのメソッドの中*/() {
/*変数名*/ := new( /*構造体の名前*/ )
/*上で定義した変数名*/ . /*設定したいデータの名前*/ = /*設定したい値*/
/*上で定義した変数名*/ . /*設定したいデータの名前*/ = /*設定したい値*/
/*上で定義した変数名*/ . /*設定したいデータの名前*/ = /*設定したい値*/
// こんな感じでデータ定義してるものを、好きなだけ書く
}
フィールドへの値設定のサンプル
func main() {
u1 := new(user) // 初期化
u1.name = "織田"
u1.height = 170
u1.gender = "男"
fmt.Println(u1) // => &{織田 170 男}
}
サンプルの方には、どのように出力されるか、やってみてます。
ポインタなので、&
が表示されています。
2.実際に使う(初期化と値設定 一気パターン)
一気に初期化と値設定する書き方
func /*何かのメソッド*/() {
/*変数名*/ := /*構造体の名前*/ { /*データの名前*/ : /*値*/ , /*データの名前*/ : /*値*/ , /*データの名前*/ : /*値*/ }
}
一気に初期化と値設定するサンプルコード
func main() {
u2 := user{name:"徳川", height:180, gender:"男"}
fmt.Println(u2) // {徳川 180 男}
}
かなりスッキリかけます。
ただし、ポインタが返ってくるワケではないので注意してください。
fmt.Println
での実行結果も、&
がありません。
3.実際に使う(初期化と値設定 さらに省略パターン)
初期化と値設定するさらに省略した書き方
func /*何かのメソッド*/() {
/*変数名*/ := /*構造体の名前*/ { /*1つ目の値*/ , /*2つ目の値*/ , /*3つ目の値*/ }
}
初期化と値設定さらに省略したサンプルコード
func main() {
u3 := user{"豊臣", 165, "男"}
fmt.Println(u3) // => {豊臣 165 男}
}
さらに省略して、こう書くこともできます。
こちらも、ポインタが返されるワケではないので注意。