[golang] Go언어 시작하기(Overview) - 1

Go 언어(golang) 시작하기

최근, 회사에서 Go언어를 쓰게 되어서 간단하게 Go언어에 대해서 간단하게 포스팅 해보려합니다.

저도 많은 내용을 아는 것은 아니니 부족한 부분이 많을 것입니다.

이 글은 정리차원에서 적어두는 것이나, Go언어를 잘 모르시는 분, Go언어에 관심이 가는 분, 또는 Go언어를 배워보고 싶은 분들께 유익한 글이 되었으면 합니다.

Let's Go

새로운 언어를 배울 때 가장 먼저 확인하는 hello world 입니다.
Go 놀이터에 가셔서 확인하실 수 있고, 웹상에서 테스트도 가능합니다.

package main

import (
"fmt"
)

func main() {
fmt.Println("Hello, playground")
}

main함수에 인자인자(ARGV)os package

Go 언어 넌 누구니?

1. 컴파일 기반의 정적 타입 언어 (compiled language)

파이썬(Python)루비(Ruby)인터프리터(interpreter)빠른 속도warning(예를 들면, 사용하지 않는 변수나 패키지를 import했을시에 Go 컴파일러는 오류를 발생시킵니다.)error
  • Go언어는 컴파일 언어지만, C/C+의 해더파일이 없어서 헤더파일이 조금만 수정되어도 모두 다시 컴파일하는 그런 문제가 없고, 소스코드를 패키지화하여 변경된 부분만 컴파일하기 때문에 컴파일 시간이 엄청나게 빠릅니다. -> How does Go compile so quickly?

2. 하지만 동적 언어 특성도 가진다 (예: interface -> Duck typing)

interfaceDuck Typingnotifier interfacenotifier interfacenotify()
  • 특정 struct에서 notify()메소드를 구현했다면, 이 structnotifier interface를 구현했다고 간주하는 것입니다.

3. 상속이 없다 (composition만 존재)

classstructstructcomposition
  • composition이란? 한 타입과 다른 타입을 결합해서 사용할 수 있게 해주는 것을 의미합니다. 이는 각 타입간의 결합도를 낮춰주는 효과가 있습니다. 일반적으로 상속을 사용해서 코딩을 하게 되면 class간의 관계가 tree형태로 만들어집니다. 따라서 상속을 계속 할수록 계층 구조가 점점 복잡해지고, 그 상황에서 여러가지 문제점이 발생할 수 있습니다. `compositio``의 중요성 -> Prefer composition over inheritance?

4. 실행시 가비지 콜렉터 탑재 (Garbage Collection)

C/C++할당 및 해제JavaC/C++

5. 멀티코어 환경 지원 (goroutine, channel)

멀티코어GoroutineGoroutine만들고 실행하고 종료하고

이후 포스팅은 다음 포스팅에 하겠습니다.