< Struct >
struct는 필드의 조합 ( Java에서 class같은 의미 )
Ex)
type Vertex struct {
X int
Y int
}
func main(){
fmt.Println( Vertex{ 1 , 2 } )
v : = Vertex{1,2}
v.X = 4
}
< Pointers >
포인트가 존재하지만 연산은 불가능하다.
구조체 변수는 구조체 포인터를 이용해서 접근할 수 있다.
간접적인 접근 실제 구조체에도 영향을 미친다.
(&)를 이용하여 접근
Ex)
type Vertex struct {
X int
Y int
}
func main(){
p := Vertex{1,2}
q := &p
q.X = 1e9
}
< Struct Literals >
필드와 값을 나열해서 구조체를 새로 할당하는 방법
'{Name : value}' 구문을 통해 할당 가능 ( 순서 상관없다 )
특별한 접두어 &를 사용하면 구조체 리터럴에 대한 포인터를 생성할 수 있다.
Ex)
type Vertex struct {
X int
Y int
}
var (
p = Vertex{1,2} // has type Vertex == {1,2}
q = &Vertex{1,2} // has type *Vertex == &{1,2}
r = Vertex{X:1} // Y :0 is implicit == {1,0}
s = Vertex{} // X: 0, Y : 0 == {0,0}
)
< New >
필드와 값을 나열해서 구조체를 새로 할당하는 방법
new(T) 는 모든 필드가 0 ( zero value ) 이 할당된 T타입의 포인터를 반환한다.
Ex)
var t *T = new (T)
또는
t := new(T)
t는 T에서 반환된 포인터를 가진다.
즉
z := new(T) // 반환된 포인터를 가짐 ( &{} )
y := T{} // 생성된 구조체
< Slices >
배열의 값을 가르킨다 (point) 그리고 배열의 길이를 가지고 있고
[]T는 T타입을 가지는 요소의 배열이다.
p := []int{1,2,3,4}
for i := 0; i < len(p); i++ {
fmt.Printf("p[%d] == %d\n", i, p[i])
// p[0] == 1
// p[1] == 2...
}