golang独学の道3-構造体

1765 ワード

初期構造体は、これにぼんやりしていた.
私個人の理解では、構造体は、まずそのようなものを定義し、彼のこの構造から対応する構造変数を作成することができます.構造体をデータベースの中の1枚の表にすることができて、構造体はjsのobjectオブジェクトに似ていて、私は気絶して、これは少しjsonのこのような構造に似ています.
そしてpythonのクラスに似ています.しかし、中のフィールドは通常しかサポートされていないようですね.まずコードをつけてからにしよう
type books struct {
	title string
	author string
	sub string
	id int
	price float32
}

定義が終わったら、最初にどう使うか考えてみましょう.変数を定義してnewメソッドで構造をインスタンス化する必要がありますか?
b := new(books){"Go   ", "www.runoob.com", "Go     ", 2,1}

最初はそう思っていましたが、申し訳ありませんが、これは間違った書き方です.後で菜鳥チュートリアルに基づいて、正確な書き方はpythonの中で直接クラスをインスタンス化するのと同じです.
b:=books{"Go   ", "www.runoob.com", "Go     ", 2,1}
b.author = "name"
fmt.Println(b)

変数bをbooks構造にインスタンス化すると、中のフィールドを変更し、b.authorで構造の著者フィールドを変更できます.
これは普通の使い方でしょう.次に、構造体に配列フィールドを配置できるかどうかを考えて、次の構造体を定義します.
type dict struct {
	key string
	value string
	tmp []int
}

確かに報告は間違っていませんが、インスタンス化するときはだめです.
dc := dict{key:"name",value:"  ",tmp:{5,6}}
fmt.Println(dc)

あとは自分のせいに違いないと気づいて、次のように変えてOKしました.
dc := dict{key:"name",value:"  ",tmp:[]int{1,2}}
fmt.Println(dc)

配列の値を直接書くのは面倒なようですね.pythonには[1,2]と書くだけで、goには少なくとも[]int{1,2}と書かなければなりません.
残念ですが、これは現実的ではないことを知っています.無理に受け入れましょう.
2.構造体も変数であり、他の用法と一致するポインタを関数的に伝達することができる.
3.構造体の重要な操作、内部関数のバインド、pythonの中のクラスのように実現することができます
type books struct {
	title string
	author string
	sub string
	id int
	price float32
}

func (f *books) get_title() string{
	return f.title
}

func main(){
b:=books{"Go   ", "www.runoob.com", "Go     ", 2,1}
fmt.Println(b.get_title())
}