ASHD Dev_Blog

GO 기초 구조

이재룡
이재룡Jun 26, 2025

[ 1. Package ]

Go에서 package는

  • (1) namespace의 역할 : 다른 패키지에서 greetings.Hello()처럼 접근 ⇒ JAVA의 package와 유사
  • (2) 접근 제어: Go에서는 첫 글자가 (대문자/소문자) = (public/private) ⇒ 자바의 class 선언과 유사
👉
함수/구조체/인터페이스/메서드 등 모두 이름 첫 글자가 대문자면 public, 소문자면 non-public
  • (3) 파일 그룹화: 관련 함수나 struct들을 묶어 관리

import 이후에 해당 package의 init( ) 부분이 자동으로 실행!

[ 2. Struct ]

OOP의 역할을 하지만 오로지 Field만 가지는 Struct

  • 선언은 type으로
// struct 정의
type person struct {
    name string
    age  int
}
go
  • 값 타입 [ person ]
  • 포인터 [ *person, &person, new(person) ]
코드타입특징사용처
p := person{}기본 값("", 0)으로 초기화기본 선언
var p person기본 값("", 0)으로 초기화기본 선언
p := person{"A", 1}일반적 사용 방식값을 수정, 원본 유지
p := new(person)포인터포인터 리턴, 내부 필드 ("", 0)포인터 선언
p := &person{"A", 1}포인터포인터 리턴여러 곳에서 수정=원본 수정
👉
p1 = person{...}은 이미 person이 선언 되어야 사용 가능
p2 := person{...}은 person선언과 동시에 p2객체 생성

[ 3. Method ]

👉
Go에서는 함수와 메소드가 다르다!

함수(function)

  • struct에 종속되지 않음
  • 독립적으로 사용
  • 호출 : hello("Tom")
func hello(name string) string {
    return "Hello, " + name
}
go

메소드 (method)

  • func (<var_name> struct_type) <func_name>() <return_type> { }
  • 하나의 struct에 종속
  • Receiver 필수 ⇒ (<var_name> struct_type) 부분
    • Receiver가 값이면 읽기 (http의 get 느낌)
    • Receiver가 포인터면 쓰기 (http의 post 느낌)
  • 호출 : rect.area( )처럼 struct 명시
func (r Rect) area() int {
    return r.width * r.height   
}

func (r *Rect) area2() int {
	r.width++
    return r.width * r.height
}
go