반응형
# 구조체
구조체: 다른 타입 여러 필드를 하나로 묶어주는 것입니다.
# 기본 구조체
type 타입명 struct {
필드명 타입
필드명 타입
...
}
예제
type Donor struct {
DonationId int64
NationalityType string
DonorType string
Name string
Mobile string
RegistrationNo string
Email string
Check bool
}
# 구조체를 선언하는 방법
var 변수명 구조체이름
예시
var donorStruct Donor
- Donor 타입으로 변수를 선언했습니다.
# 초기화 설정 방법
예시
func SetStruct() {
var donorStruct Donor
fmt.Println("초기값 설정 전 :", donorStruct)
donorStruct.DonationId = 123
donorStruct.Email = "1@test.com"
donorStruct.NationalityType = "NATIVE"
donorStruct.DonorType = "INDIVIDUAL"
donorStruct.Name = "홍길동"
donorStruct.Mobile = "0000000000"
donorStruct.Check = true
fmt.Println("초기값 설정 후 :", donorStruct)
fmt.Println("이름 필드 값 출력 :", donorStruct.Name)
}
결과
초기값 설정 전 : {0 false}
초기값 설정 후 : {123 NATIVE INDIVIDUAL 홍길동 0000000000 1@test.com true}
이름 필드 값 출력 : 홍길동
- 초기값을 설정하지 않는 경우 int는 0, string은 “”, bool은 false으로 설정됩니다.
# 모든 필드를 초기화 하는 방법
1) 한줄로 표현하기
- 구조체에 순서대로 모든 필드에 값을 넣으면 됩니다.
예시
var donorStructV1 = Donor{1, "NATIVE", "INDIVIDUAL", "홍길동", "0000000000", "9901012000000", "1@test.com", true}
fmt.Println("V1 초기값 설정 후 :", donorStructV1)
// V1 초기값 설정 후 : {1 NATIVE INDIVIDUAL 홍길동 0000000000 9901012000000 1@test.com true}
2) 여러줄로 표현하기
- 여러줄로 표현할 때에는 마지막
,
(쉼표)를 꼭 찍어줘야한다. 쉼표 뒤에 있는}
중괄호 닫힘은 다음 줄에 적어야지 적용이 됩니다.
예시
var donorStructV2 = Donor{
1,
"NATIVE",
"INDIVIDUAL",
"홍길동",
"0000000000",
"9901012000000",
"1@test.com",
true,
}
fmt.Println("V2 초기값 설정 후 :", donorStructV2)
// V2 초기값 설정 후 : {1 NATIVE INDIVIDUAL 홍길동 0000000000 9901012000000 1@test.com true}
# 일부 필드만 초기화하는 방법
1) 한줄로 표현하기
예시
var donorStructV3 = Donor{Name: "홍길동", Email: "1@test.com"}
fmt.Println("V3 초기값 설정 후 :", donorStructV3)
결과
V3 초기값 설정 후 : {0 홍길동 1@test.com false}
2) 여러줄로 표현하기
예시
var donorStructV4 = Donor{
DonationId: 100,
Name: "홍길동",
Email: "1@test.com",
}
fmt.Println("V4 초기값 설정 후 :", donorStructV4)
결과
V4 초기값 설정 후 : {100 홍길동 1@test.com false}
# 구조체를 포함하는 구조체
- 구조체 필드에 다른 구조체를 정의할 수 있습니다.
type 구조체명 struct {
필드명 다른구조체명
}
예시
type DonorReceipt struct {
Id int64
Status string
Type string
Note string
Name string
Donor Donor
}
- 위에 Donor라는 구조체를 DonorReceipt 구조체 안에 포함을 시켰습니다.
# 구조체안에 구조체를 설정하는 방법
예시
var donor = Donor{
1,
"NATIVE",
"INDIVIDUAL",
"홍길동",
"0000000000",
"9901012000000",
"1@test.com",
true,
}
var donorReceiptV1 = DonorReceipt{
Id: 1,
Status: "Applied",
Donor: donor,
}
fmt.Println("donor 초기값 설정 후 :", donor)
fmt.Println("donorReceipt V1 초기값 설정 후 :", donorReceiptV1)
var donorReceiptV2 = DonorReceipt{
Id: 1,
Status: "Applied",
Donor: Donor{
DonorType: "INDIVIDUAL",
Name: "김철수",
},
}
fmt.Println("donorReceipt V2 초기값 설정 후 :", donorReceiptV2)
결과
donor 초기값 설정 후 : {1 NATIVE INDIVIDUAL 홍길동 0000000000 9901012000000 1@test.com true}
donorReceipt V1 초기값 설정 후 : {1 Applied {1 NATIVE INDIVIDUAL 홍길동 0000000000 9901012000000 1@test.com true}}
donorReceipt V2 초기값 설정 후 : {1 Applied {0 INDIVIDUAL 김철수 false}}
- donorReceiptV1는 변수 donor에 있는 전체 값을 Donor 필드에 넣었습니다.
- donorReceiptV2는 Donor 필드에 일부 값만 넣었습니다.
# 중복된 필드명이 있는 경우
- . (점)을 사용하여 한단계 더 접근 해서 값을 불러 옵니다.
예시
var donorReceipt = DonorReceipt{
Id: 1,
Status: "Applied",
Name: "김영희",
Donor: Donor{
DonorType: "INDIVIDUAL",
Name: "김철수",
},
}
fmt.Println("donorReceipt 필드안에 있는 donor의 name 값 :", donorReceipt.Donor.Name) //김철수
fmt.Println("donorReceipt 안에 name 값 :", donorReceipt.Name) //김영희
- 재귀적인 표현이 불가능하다
예시
type Donor struct {
DonationId int64
DonorReceipt DonorReceipt
}
type DonorReceipt struct {
Id int64
Donor Donor
}
- 위 처럼 코드를 짜면 Invalid recursive type 'DonorReceipt' DonorReceipt → Donor → DonorReceipt 오류 문구가 뜨면서 컴파일이 되지 않습니다.
반응형
'Study > Go 언어' 카테고리의 다른 글
[golang] 환경변수 설정하는 방법 (0) | 2022.02.20 |
---|---|
[golang] 타입(type) 확인 하는 방법 (0) | 2022.02.19 |
[golang] 배열 공부하기 (0) | 2022.02.14 |
[golang] for range 공부하기 (0) | 2022.02.13 |
[golang] for문 공부하기 (0) | 2022.02.12 |