Go/構造体

出典: フリー教科書『ウィキブックス(Wikibooks)』
< Go
ナビゲーションに移動 検索に移動

構造体[編集]

書き方1[編集]

書式
type 構造体のタグ名 struct {
    プロパティ名1 型1 ; 
    プロパティ名2 型2 ;
    プロパティ名3 型3 ;


各プロパティへのアクセス方法

まず、構造体変数を作成しないといけない。

構造体変数を作成するには、

var 構造体変数 = new(構造体のタグ名) ;

をして、構造体変数を作成。

そして、アクセスするには

構造体変数.プロパティ名

でアクセスできる。

※ C言語の構造体では「プロパティ」ではなく「メンバ」という言い方だが、JavaScriptなどで似たような記法(役割は別だが)の第2項を「プロパティ」というので、本書でもその言い方にならった。
コード例
package main

import "fmt"

type list struct {
    syouhinmei string ; // 商品名
    kakaku int ; // 価格
} 


func main() {

    var kou = new(list) ;

    kou.syouhinmei = "牛乳" ;
    kou.kakaku = 150 ;
    
    fmt.Println("商品名は ", kou.syouhinmei )
    fmt.Println("価格は ", kou.kakaku )
}
実行結果
商品名は  牛乳
価格は  150


書き方2[編集]

構造体において、構造体変数を作成する際や、それぞれの値を代入するとき、下記のように、マップのような書き方もある。

構造体変数 := タグ名{ キー1 : 値1 , キー2 : 値2 } 

キー名はプロパティ名である。

アクセス方法は同じく

構造体変数.プロパティ名

でアクセスできる。

コード例
package main

import "fmt"


type list struct {
    syouhinmei string ; // 商品名
    kakaku int ; // 価格
} 


func main() {

    kou := list{syouhinmei : "牛乳" , kakaku : 150} 
    
    fmt.Println("商品名は ", kou.syouhinmei )
    fmt.Println("価格は ", kou.kakaku )
}
実行結果
商品名は  牛乳
価格は  150


構造体配列[編集]

Go言語でも構造体配列を作成できる。

構造体配列とは(けっして、配列を要素にもつ構造体ではなく、)構造体そのものを要素にもつ配列のことである。

構造体配列については、下記のコード例を見たほうが早い。 構造体配列ついて詳しくは『C言語/構造体・共用体#構造体の配列』 などを参照せよ。

Go言語で構造体配列をつくるには、構造体変数の宣言の際、

配列名 := make( []構造体のタグ名, 配列の要素数 ) 

と書けばよい。

なお make 関数とは、スライスの作成の関数である。

なので、正確には、言うならばGo言語の場合には「構造体スライス」ではあるが。


コード例
package main

import "fmt"


type list struct {
    syouhinmei string ; // 商品名
    kakaku int ; // 価格
} 


func main() {
    hai := make( []list, 8 ) 

    hai[0].syouhinmei = "牛乳" 
    hai[0].kakaku = 150
   
    hai[1].syouhinmei = "りんごジュース" 
    hai[1].kakaku = 120
   
    
    fmt.Println("商品名は ", hai[0].syouhinmei )
    fmt.Println("価格は ", hai[0].kakaku )
    
    fmt.Println("商品名は ", hai[1].syouhinmei )
    fmt.Println("価格は ", hai[1].kakaku )
        
}
実行結果
商品名は  牛乳
価格は  150
商品名は  りんごジュース
価格は  120


出版状況など

残念ながら市販のGo言語の書籍には、構造体配列が書かれていない書籍も多い。単に、配列を要素にもつ構造体(「構造体の配列」ではなく、単なる「配列の構造体」)についてしか説明してない書籍やサイトも多い(それらのコードには、大した実用性が無い)。

データベースなどをプログラミングで作成する際は、構造体配列の機能のある言語でないと、使い物にならない。

クラスは無い[編集]

Go言語に、C++のような「クラス」の機能は無い。

なお、標準C言語にも「クラス」機能は無い。

C++のクラスは構造体を発展させたものなので、本書でも、いま読んでる構造体のページでクラスについて説明した。