코딩/Go

Go 언어 설명

Namchun 2023. 4. 18. 17:24

Go언어란?

구글에서 개발한 프로그래밍 언어로, C와 파이썬의 장점을 결합한 언어이다.
Go 언어는 간결하면서도 효율적인 코드 작성이 가능하며, 병렬 처리에 강한 특징을 가지고 있다.

 

참고로 이 캐릭터의 이름은 고퍼(Gopher)라고 한다.

 

Go 언어가 사용되는 분야

1. 클라우드 인프라

Docker, Kubernetes, Cloud Foundry와 같은 클라우드 인프라의 핵심 기술로 사용된다

 

2. 네트워크 프로그래밍

Go 언어는 네트워크 프로그래밍을 위한 기능들을 내장하고 있어, 서버와 클라이언트의 빠른 개발에 사용된다

 

3. 블록체인

블록체인과 관련된 프로젝트인 이더리움, Hyperledger Fabric 등에서 사용된다

 

4. 데이터베이스

데이터베이스와 관련된 프로젝트인 MongoDB, InfluxDB 등에서 사용된다

 

또한, 최근에는 게임 서버대규모 웹 서비스에서도 Go 언어가 사용되고 있다

게임 서버는 다수의 사용자가 동시에 접속하고 데이터를 주고받는 대규모 분산 시스템이므로, 안정성성능이 매우 중요하다. Go 언어는 고루틴, Garbage Collection, 타입 캐스팅을 지원하여 게임 서버에서 많이 사용되고 있다

 

Go언어 장점/단점

장점:

  • 빠른 컴파일 속도 : Go언어는 정적 타입 언어이면서 컴파일 언어이다. 이는 코드 실행 속도와 함께 컴파일 속도빠르다는 것을 의미한다
  • 동시성 처리 : 고루틴(Goroutine)과 채널(Channel)을 통해 동시성 처리를 지원한다. 이를 통해 병렬 처리와 이벤트 기반 처리 등을 간편하게 구현할 수 있다
  • 간결한 문법 : C언어와 비슷한 문법을 가지면서도 불필요한 기능을 제거하여 코드의 가독성과 유지보수성을 높였다
  • 메모리 관리 : 가비지 컬렉션을 지원하여 개발자가 메모리 관리에 대한 부담을 줄여준다
  • 크로스 플랫폼 : Windows, macOS, Linux 등 다양한 운영체제에서 실행될 수 있다

 

단점:

  • 예외 처리 : try-catch 문이 없고 대신 panic-recover를 사용하여 예외 처리를 한다. 이 방식은 예외 처리에 대한 문제를 일으킬 수 있다
  • 상속 지원의 한계 : Go 언어는 상속을 지원하지 않기 때문에 객체 지향 프로그래밍에서의 상속을 사용할 수 없다 

 

Go언어 문법

1. 변수 선언

Go 언어에서 변수를 선언할 때는 var 키워드를 사용한다. 변수 이름 뒤에 데이터 타입을 명시할 수도 있지만,

타입 추론 기능을 사용하여 데이터 타입을 생략할 수도 있다.

 

// 타입 명시
var num int = 10

// 타입 추론
var name = "John"
age := 20

 

2. 함수 선언

함수를 선언할 때는 func 키워드를 사용한다. 함수 이름 뒤에 괄호를 열고 닫아 매개변수를 명시할 수 있으며, 반환값이 있는 경우 함수 이름 뒤에 반환값의 데이터 타입을 명시한다.

// 반환값이 없는 함수
func greet(name string) {
    fmt.Println("Hello, ", name)
}

// 반환값이 있는 함수
func add(a int, b int) int {
    return a + b
}

 

3. if문

if 문을 사용할 때는 일반적인 C언어와 비슷한 문법을 사용한다. 조건식이 참일 경우 중괄호 안의 코드를 실행한다.

if num := 10; num > 0 {
    fmt.Println("num is positive")
} else if num == 0 {
    fmt.Println("num is zero")
} else {
    fmt.Println("num is negative")
}

위의 코드에서 num:=10은 if문 내부에서 변수 num을 선언하고 초기화하는 코드이다.

이렇게 선언된 변수는 if문의 범위 안에서만 사용할 수 있다.

 

4. for문

for문은 일반적으로 C나 Java와 유사한 문법을 사용한다.

// 기본적인 for문
for i := 0; i < 10; i++ {
    fmt.Println(i)
}

// while문 처럼 사용하기
i := 0
for i < 10 {
    fmt.Println(i)
    i++
}

// 무한루프
for {
    // ...
}

 

5. switch문

Go 언어에서도 switch문이 있다

switch i {
case 0:
    fmt.Println("i는 0입니다.")
case 1:
    fmt.Println("i는 1입니다.")
default:
    fmt.Println("i는 0도 아니고 1도 아닙니다.")
}

 

6. 배열

Go 언어에서는 배열을 다음과 같이 선언할 수 있다

var arr [5]int                // 길이가 5인 int형 배열
arr := [5]int{1, 2, 3, 4, 5}  // 배열을 초기화하면서 선언

 

7. 슬라이스

Go언어에서는 슬라이스라는 것이 있다.

슬라이스는 배열과 유사하지만 길이가 가변적이다. 슬라이스는 다음과 같이 선언할 수 있다.

var slice []int        // int형 슬라이스
slice := []int{1, 2, 3, 4, 5}  // 슬라이스를 초기화하면서 선언

 

슬라이스는 make() 함수를 사용하여 동적으로 생성할 수도 있다.

slice := make([]int, 5)    // 길이가 5인 int형 슬라이스 생성

 

슬라이스는 다음과 같은 함수를 제공하여 추가, 삭제, 병합 등을 할 수 있다.

// 슬라이스에 요소 추가하기
slice = append(slice, 6)

// 슬라이스의 일부 추출하기
subslice := slice[1:3]

// 슬라이스 병합하기
slice1 := []int{1, 2, 3}
slice2 := []int{4, 5, 6}
slice3 := append(slice1, slice2...)

 

이상으로 Go언어에 대해서 간략하게 알아보았다