Golang初級シリーズチュートリアル-struct
8130 ワード
Golang初級シリーズチュートリアル-struct
対象思想を受け入れたユーザに対しては,まず,
いくつかのオブジェクト向け言語では、方法は
上記の定義は、
また、構造体には、他のデータが含まれていてもよい.したがって、クラスと同様に、表示したいデータを構造体に定義して、メモリ内の構造体の格納領域を配置することができます.以下はいくつかの正しい例です.
これで、上記で定義した
以上の出力から、構造体の変数が初期化されていない場合、自動的に
以下の例では、構造体の内部属性を異なる方法で初期化し、標準出力に印刷することを示す.
以上の例では、以下の点に注意する必要があります.は は キーワード 取得したポインタは、属性石にアクセスし、
構造体と変数のカプセル化と可視性
他の言語には、
これは何ですか?何ですか.私が言いたいのは、これはまるで天才的なデザインですね.こんなに簡単で、こんなに明るくて、追加のキーワードは必要ありません.また、変数の頭文字を表示することで、時間をかけて検索する必要がなく、可視性を瞬時に知ることができます.他の言語では、この機能を実現するために変数の規定がある可能性があります.しかし
Golangは不思議な言語で、一緒に進歩しましょう.
Go
対象言語ですか対象思想を受け入れたユーザに対しては,まず,
Go
にclass
キーワードがないことを宣言する必要がある.キーワードstruct
は集大成者です.Java
、C#
、C++
およびその他の言語では、struct
がサポートされています.サポートstruct
には、メソッドが含まれています.Go
もサポートされており、より多くの機能が提供されています.いくつかのオブジェクト向け言語では、方法は
class
またはstruct
に存在し、Go
にはstruct
のみが存在する.Java
部分コードclass House {
public String getHouseName() { //method defined within class
//implementation
}
}
Go
部分コードtype House struct { }
func (h House) GetHouseName() string { } //method defined outside of struct, but works on House
Go
にはオブジェクト向けの概念はないが、struct
のいくつかの特性により、類似の機能特性も実現できる.構造体は、キーワードtype
およびstruct
によって定義される.type my_struct_name struct { }
type Rectangle struct { }
type Vehicle struct { }
type Vehicle1_Car struct { }
上記の定義は、
Go
変数定義のルールに合致し、有効な文です.次のいくつかは正しくありません.type Hash# struct {} //cannot have special characters
type 0struct struct {} //cannot start with a number
また、構造体には、他のデータが含まれていてもよい.したがって、クラスと同様に、表示したいデータを構造体に定義して、メモリ内の構造体の格納領域を配置することができます.以下はいくつかの正しい例です.
type my_struct_name struct {
i int
j int
s string
}
type Rectangle struct {
length, width int //you can define multiple items of the same type on the same line separated by commas
area float64
}
これで、上記で定義した
Rectangle
を使用して、そのプロパティにアクセスできます.package main
import "fmt"
type Rectangle struct {
length, width int
}
func main() {
r := Rectangle{}
fmt.Println("Default rectangle is: ", r) //print default zero-ed value
}
Default rectangle is: {0 0}
以上の出力から、構造体の変数が初期化されていない場合、自動的に
zero-value
に割り当てられ、すなわちint
タイプが0
に割り当てられ、string
タイプが""
に割り当てられることがわかる.したがって、構造体については、そのzero-value
はその内部属性によって決定される.以下の例では、構造体の内部属性を異なる方法で初期化し、標準出力に印刷することを示す.
package main
import "fmt"
type Rectangle struct {
length, width int
name string
}
func main() {
r1 := Rectangle{2, 1, "my_r1"} //initialize values in order they are defined in struct
fmt.Println("Rectangle r1 is: ", r1)
r2 := Rectangle{width:3, name:"my_r2", length:4} //initialize values by variable name in any order
fmt.Println("Rectangle r2 is: ", r2)
pr := new (Rectangle) //get pointer to an instance with new keyword
(*pr).width = 6 //set value using . notation by dereferencing pointer.
pr.length = 8 //set value using . notation - same as previous. There is no -> operator like in c++. Go automatically converts
pr.name = "ptr_to_rectangle"
fmt.Println("Rectangle pr as address is: ", pr) //Go performs default printing of structs
fmt.Println("Rectangle pr as value is: ", *pr) //address and value are differentiated with an & symbol
}
Rectangle r1 is: {2 1 my_r1}
Rectangle r2 is: {4 3 my_r2}
Rectangle pr as address is: &{8 6 ptr_to_rectangle}
Rectangle pr as value is: {8 6 ptr_to_rectangle}
以上の例では、以下の点に注意する必要があります.
{}
によって属性値を初期化することができ、注意賦値は宣言の順序で,
によって分割される.r1 := Rectangle{2, 1, "my_r1"}
:
の形式で付与することもできる.r2 := Rectangle{width:3, name:"my_r2", length:4}
new
により、オブジェクトのポインタを取得できます.*
オペレータは不要です.Go
その構造体の属性に応じて、デフォルトの印刷メカニズムが提供される.構造体と変数のカプセル化と可視性
他の言語には、
public
、protected
、private
などの宣言属性とメソッドの異なるコンテキストに対する可視性があります.Go
に出会う前に、このようなデザインは間違いないと思います.Go
可視性のサポートは簡単ですが、最初はこのデザインが下手だと思っていたかもしれません.くだらないことは言うまでもないが、Go
では、頭文字が大きくなったら、アウトソーシングに対して見えることを示している.うん、簡単だよ.type notExported struct { //this struct is visible only in this package as it starts with small letter
}
type Exported struct { //variable starts with capital letter, so visible outside this package
notExportedVariable int //variable starts with small letter, so NOT visible outside package
ExportedVariable int //variable starts with capital letter, so visible outside package
s string //not exported
S string //exported
}
これは何ですか?何ですか.私が言いたいのは、これはまるで天才的なデザインですね.こんなに簡単で、こんなに明るくて、追加のキーワードは必要ありません.また、変数の頭文字を表示することで、時間をかけて検索する必要がなく、可視性を瞬時に知ることができます.他の言語では、この機能を実現するために変数の規定がある可能性があります.しかし
Go
はそれを大きく発揚した.Golangは不思議な言語で、一緒に進歩しましょう.