GO언어 예제를 보면 C++처럼 class로 시작해서 속성과 멤버함수를 묶는 구문이 없습니다.

struct 구문만 있는데 다른 객체 언어와는 다르게 GO언어에서는 포인터를 이용하여

독특한 방법으로 멤버 함수를 정의합니다.


예를 들어 사각형 객체 rectangle 대해서 넓이와 높이, 면적을 계산하는 멤범 함수를

구현하려면 아래와 같이 포인터를 이용합니다.

package main

import "fmt"

type rectangle struct{

    left, top, right, bottom int
}


func ( c *rectangle)horz_size() int{
	return c.right - c.left
}
func ( c *rectangle)vert_size() int{
	return c.bottom - c.top
}

func ( c * rectangle)area() int{
	return c.horz_size() * c.vert_size()
}

func main(){

     rect	:= rectangle { 0, 0, 50, 100}

     fmt.Println( rect.horz_size(), rect.vert_size(), rect.area())

}

stuct rectangle는 좌표 값을 갖고 넓이, 높이, 면적을 구하는 함수에는 이름 앞에 rectangle의 포인터를

지정해서 값을 받도록 합니다.


어떻습니까? 매우 독특하죠? 왜 GO언어에서 이렇게 했는지 이해가 안 되는데 아마도 전체적인 코딩 방식을

따르다 보니 이렇게 되지 않았나 싶기도 합니다만, 매우 낯설은 모습이라 반감이 없지 않습니다.

자주 사용하다 보면 익숙해지겠지요.