7장. 구조 및 인터페이스
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
Go에 내장된 데이터 유형만 사용하여 프로그램을 작성할 수도 있겠지만, 어느 시점에서는 상당히 지루해질 것입니다. 도형과 상호작용하는 프로그램을 생각해 봅시다:
packagemainimport("fmt";"math")funcdistance(x1,y1,x2,y2float64)float64{a:=x2–x1b:=y2–y1returnmath.Sqrt(a*a+b*b)}funcrectangleArea(x1,y1,x2,y2float64)float64{l:=distance(x1,y1,x1,y2)w:=distance(x1,y1,x2,y1)returnl*w}funccircleArea(x,y,rfloat64)float64{returnmath.Pi*r*r}funcmain(){varrx1,ry1float64=0,0varrx2,ry2float64=10,10varcx,cy,crfloat64=0,0,5fmt.Println(rectangleArea(rx1,ry1,rx2,ry2))fmt.Println(circleArea(cx,cy,cr))}
이 프로그램은 직사각형과 원의 넓이를 구합니다. 모든 좌표를 추적하면 프로그램이 수행하는 작업을 확인하기가 어렵고 실수가 발생할 가능성이 높습니다.
구조
이 프로그램을 개선하는 쉬운 방법은 구조체를 사용하는 것입니다. 구조체는 명명된 필드를 포함하는 유형입니다. 예를 들어 다음과 같이 원을 표현할 수 있습니다:
typeCirclestruct{xfloat64yfloat64rfloat64}
type 키워드는 새 유형을 소개합니다. 그 뒤에는 유형 이름 (Circle), struct 유형을 정의하고 있음을 나타내는 struct 키워드, 중괄호 안의 필드 목록이 이어집니다.
필드는 그룹화된 변수 집합과 같습니다. 각 필드에는 이름과 유형이 있으며 구조체에서 다른 필드와 인접하여 저장됩니다. 함수와 마찬가지로 동일한 유형을 가진 필드를 접을 수 있습니다:
typeCirclestruct{x,y,rfloat64}
초기화
새로운 Circle 유형의 인스턴스를 다양한 방법으로 만들 수 있습니다:
varcCircle
다른 데이터 유형과 마찬가지로 기본적으로 0으로 설정된 로컬 Circle 변수가 생성됩니다. struct 의 경우 0은 각 필드가 해당 0 값으로 설정됨을 의미합니다( int의 경우0, float의 경우 0.0, "" 의 경우 string, 포인터의 경우 nil 등) new 함수를 사용할 수도 있습니다:
c:=new(Circle)
이렇게 하면 모든 필드에 메모리를 할당하고 각 필드를 0 값으로 설정한 다음 구조체에 대한 포인터를 반환합니다(*Circle). 포인터는 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access