golang에는 js의 object 같은 구조체가 있다.
가이드를 찾아보면 보통 이렇게 쓴다.
type Vertex struct {
X int
Y int
}
구조체를 전달하는 건 그냥 전달하면 된다.
배열이든 구조체 그 자체든 어쨌든 타입에 맞게 전달할 수 있다.
func main() {
fmt.Println(returnContent())
}
type content struct {
aaa string
bbb string
ccc string
}
func returnContent() []content {
insert := content{
aaa: "aaa",
bbb: "bbb",
ccc: "ccc",
}
contents := []content{}
for i := 0; i < 3; i++ {
contents = append(contents, insert)
}
return contents
}
위의 코드처럼 한 패키지에 있으면 괜찮은데
서로 다른 패키지에 있으면
구조체만 전달하는 경우엔
type Content struct {
aaa string
bbb string
ccc string
}
이렇게 Content 형태로 앞글자를 대문자로
멤버 변수까지 접근해야 한다면
type Content struct {
Aaa string
Bbb string
Ccc string
}
멤버 변수들도 Aaa, Bbb, Ccc 처럼 대문자로 해줘야 한다.
근데 구조체를 배열로 만들어서 전달하면
사실 구조체 자체를 쓴다기 보단 멤버 변수를 쓴다.
그래서
type content struct {
Aaa string
Bbb string
Ccc string
}
구조체는 소문자로 하고
멤버 변수만 대문자로 해줬더니
전달된 변수에서 멤버 변수에 접근이 가능하더라.
서로 다른 패키지에서 전달받을 때, 이렇게 접근해서 사용할 수 있다.
contentList := content.returnContent()
for _, val := range contentList {
fmt.Println(val.Aaa)
}
그.. reflect 패키지를 사용해서 접근도 가능하긴 한데
가능하면 안쓰는게 좋다는 가르침을 받았다..
'공부공부 > 고' 카테고리의 다른 글
golang으로 만들어 본 토이 프로젝트 (0) | 2022.05.23 |
---|---|
golang의 Public, Private (0) | 2022.05.09 |
golang echo stylesheet 불러오기 (0) | 2022.05.08 |
golang echo 템플릿 사용기 (0) | 2022.05.08 |
golang으로 만든 구글의 10가지 오픈 프로젝트 (0) | 2020.11.03 |