Computer_Language/GO

[Go] 1. Go Language(Golang)에 대하여

Joo-Topia 2019. 8. 30. 01:10

Go는 최근에 많이 언급되고 있는 프로그래밍 언어 중 한 종류이다.

사실 Go는 만들어진지는 10년이 조금 넘은 프로그래밍 언어라고 한다.

남들보다 늦게 Go를 알게 된 것이 후회가 된다...

 

 

내가 공부한 Go란?


Go의 개발방향은 "간단하고 간결한 직관적인 언어" + "이해하기 쉬운 코드" 라고한다.

예시 코드와 함께 어떤 느낌인지 느껴보자.

package main

import "fmt"

func main() {
    var dan int
    fmt.Scanln(&dan)	
	
    for i:= 1;i<=9;i++ {
        fmt.Printf("%d X %d = %d\n",dan,i,dan*i)
    }
}

*위 코드를 작성하다가 생각난 건데, 티스토리에서 제공하는 코드블럭은 tab이 스페이스바 4칸으로 설정이 안 되어있어서 너무 불편하다. 다른 건 다 편한데..

프로그래밍 공부에서 가장 기본적인 예제 "구구단" 코드이다.

C와 유사하면서도 다른 문법들은 차차 블로그에 정리해 나갈 것인데, 이 포스트에서 언급하고 싶은 내용은 중괄호이다.

내 깃허브에 있는 코드들을 살펴보면 아래의 코드처럼 중괄호를 통일하지 않고 사용하고 있었다.

#1번
for(i = 0; i < 10; i++){
    blabla;
}

#2번
for(i = 0; i < 10; i++)
{
    blabla;
}

Go는 신기하게도 1번 스타일이 아니면 컴파일 오류가 발생한다.

"해하기 쉬운 코드"를 위한 제약이라는 생각이 든다.

덕분에 Go를 공부하면서 내 안 좋은 코딩 습관들이 고쳐지는 것 같다.

 

위와 같은 사소하지만 생각보다 까다로운 제약만 잘 지켜주면

Go는 정말 강력하고 가시성 좋은 코드가 될 것이다.

 

Go의 특징


Go언어의 특징

1. 정적타입 : 자료형에 형이 정해져 있음

2. 강타입 : 자료형 변환(타임 캐스팅)이 항상 명시되어야 함

3. 안전성 : 타입 안전성과 메모리 안전성

4. 병행성 : 스레드를 한 단계 더 추상화한 '고루틴'이라는 개념 사용

5. 가비지 컬렉션 : 결과물에 go runtime이 내장되는데 go run time이 메모리를 핸들링

6. 컴파일 언어 : 인터프리터 언어가 아니지만 근접한 수준의 빠른 컴파일

7. 포인터는 존재, 하지만 포인터 연산은 없음

 

Go언어에 없는 것들

1. 클래스

2. 상속

3. 생성자

4. final

5. 제네릭

 

- "바로 실행 해보면서 배우는 Go Lang" 강의를 들으며 공부 중이며, 백문이 불여일견이라 생각하여 다 공부한 내용은 아니지만 익숙해지기 위해 그대로 타이핑 한 내용.