관리 메뉴

피터의 개발이야기

[GO] GO 언어란? 기본 문법 본문

Programming/GO

[GO] GO 언어란? 기본 문법

기록하는 백앤드개발자 2024. 11. 19. 21:41
반응형

ㅁ 들어가며

ㅇ 회사에서 GO 언어로 작성된 모듈을 담당하게 되었다.

ㅇ 핵심적인 GO의 개요, 설치방법, 기본 문법에 대해서 정리하였다.

 

ㅁ GO 언어 개요

 GO는 Google에서 개발한 오픈소스 프로그래밍 언어로, 간결하고 효율적인 코드 작성을 지향한다. 2009년에 처음 발표되었으며, 빠른 컴파일 속도와 동시성 프로그래밍을 쉽게 구현할 수 있는 특징을 가지고 있다. Go의 주요 설계 정책은 가능한 효율적이고 안전하며 뛰어난 프로그램 언어로 만드는 것이다. Go에서는 코드의 쓸데없는 설명과 복잡성을 줄이는 것이 적극적으로 이루어지고 있으며, 단순화를 위해 C++나 Java처럼 계층이나 제네릭스, 예외 처리, 단언문, 오버로드가 없다. 새로운 언어이지만 이미 많은 기업이 사용하고 있다. 특히Kubernetes는 Go로 구현되어 이미 많은 곳에서 사용하고 있다.

관련 글: Go 개발자들

 

ㅁ 주요 특징

  • 정적 타입 언어
  • 가비지 컬렉션 지원
  • 병렬 프로그래밍 지원
  • 빠른 컴파일 속도
  • 크로스 컴파일 지원

 

ㅁ GO 설치하기

ㅇ GO는 여러 OS의 설치방법을 제공하고 있다. 여기서는 Mac에서 GO를 설치하는 방법을 정리하였다.

// Homebrew를 사용하여 설치
$ brew install go

// 설치 확인
$ go version
go version go1.23.2 darwin/arm64

 

ㅁ GO 기본 문법

패키지 선언

package main

 ㅇ 모든 GO 프로그램은 패키지 선언으로 시작한다.

 

import 문

import (
    "fmt"
    "math"
)

ㅇ 필요한 패키지를 가져온다.

 

함수 정의

func add(x int, y int) int {
    return x + y
}

ㅇ 함수는 func 키워드로 정의한다.

 

변수 선언

var x int = 10 // 기본
var y int      // 초깃값생략 시 타입별 기본값 대체
var z = 4.     // 타입생략
y := 20 // 짧은 선언, 선언대입문

ㅇ 변수는 var 키워드로 선언한다.

ㅇ := 생성문을 간소화 할 수 있다.

 

타입 기본값

타입 기본값
모든 정수타입(int8~64, uint8~64, byte, rune) 0
모든 실수타입(float32,float64, complex64, complex128) 0.0
bool false
문자열 ""

 

제어문

if x > 0 {
    fmt.Println("양수")
} else {
    fmt.Println("음수 또는 0")
}

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

ㅇ 조건문과 반복문

 

Pointers

a := 2
b := 5
fmt.Println(&a, &b)

ㅇ &(variable name) : 메모리 주소를 보는 법

a := 2
b := &a
fmt.Println(*b)

ㅇ * : 메모리 주소에 저장되어 있는 데이터를 보는 법

 

배열과 슬라이스

var arr [5]int // 배열
slice := []int{1, 2, 3} // 슬라이스

ㅇ 배열은 고정 길이, 슬라이스는 가변 길이이다.

 

Maps

func main() {
	// map 기초문법
    test := map[string]string{"name": "peterica", "age": "12"}
    fmt.Println(test)

    // range를 사용할 수 있다.
    for key, value := range test {
		fmt.Println(key, value)
	}
}

ㅇ 객체 := map[(key type)](value type){key: value}
ㅇ range를 이용해서 반복문에서도 이용 가능하다.

 

구조체

type Person struct {
    Name string
    Age  int
}

ㅇ 사용자 정의 타입을 만들 수 있다.

 

메서드

func (p Person) SayHello() {
    fmt.Printf("안녕하세요, 제 이름은 %s입니다.\n", p.Name)
}

ㅇ 구조체에 메서드를 추가할 수 있다.

 

인터페이스

type Greeter interface {
    SayHello()
}

ㅇ 메서드의 집합을 정의한다.

 

고루틴과 채널

go func() {
    // 비동기로 실행될 코드
}()

ch := make(chan int)
ch <- 42 // 채널에 값 보내기
value := <-ch // 채널에서 값 받기

ㅇ 동시성 프로그래밍을 위한 기능이다.

goroutine
Go루틴(goroutine)은 Go 런타임이 관리하는 Lightweight 논리적 (가상적) 쓰레드이다.
goroutine은 OS 쓰레드보다 훨씬 가볍게 비동기 처리를 구현하기 위하여 만든 것으로, 기본적으로 Go 런타임이 자체 관리한다.  Go루틴들은 OS 쓰레드와 1 대 1로 대응되지 않고,Go 런타임 상에서 관리되는 작업단위인 여러 goroutine들을 Multiplexing으로 훨씬 적은 OS 쓰레드를 사용한다. 메모리 측면에서도 OS 쓰레드가 1 메가바이트의 스택을 갖는 반면, goroutine은 이보다 작은 몇 킬로바이트의 스택을 갖는다. Go 런타임은 Go루틴을 관리하면서 Go 채널을 통해 Go루틴 간의 통신을 쉽게 할 수 있도록 하였다.

 

ㅁ 마무리

 이상 간단하게 GO 언어의 기본적인 문법을 살펴보았다. GO는 간결하면서도 강력한 기능을 제공하는 언어로, 서버 프로그래밍이나 시스템 프로그래밍에 많이 사용된다. 더 자세한 내용은 GO 공식 문서를 참조해야 한다.

 

ㅁ 함께 보면 좋은 사이트

 devkuma - Go 언어

 예제로 배우는 Go 프로그래밍

Go 문법 정리

 

 

반응형
Comments