본문 바로가기
미분류

Go 기본문법 1

by 혜리루 2021. 4. 25.

0. 서론

go언어는 그 속도와 간단함 (그리고 구글) 덕분에 빠르게 성장하고 있는 언어 중 하나로 꼽히는데요,

최근에 go 언어 스터디를 시작하게 되어 책을 읽으면서 학습한 내용을 간단하게 정리해보려고합니다.

간단한 내용이므로 큰 구조 없이 의식의 흐름대로 정리를 하겠습니다.

1. go 파일 구조

package main  # 코드를 직접 실행하기 위해 필요한 특수 패키지(main)
import "fmt"  # 다른 패키지의 코드를 사용하기 위해 가져옴

func main(){  # 프로그램을 시작하면 가장 먼저 실행됨
  fmt.Println("Hello")
}

Go언어의 특징은 일관성입니다. 따라서 모든 Go 파일은 일관적인 구조를 가지는데요,

 

모든 Go 파일은 package절로 시작하게 됩니다. 현재 코드가 속하는 package의 이름을 가장 처음에 적어줍니다.

main package는 특수한 package로 해당 코드를 직접 실행해야할때 main이라는 이름을 붙여줍니다.

 

그리고 사용하고자하는 다른 package를 가져오는 import문이 뒤따르고요,

 

main함수를 작성해주어야합니다. main 함수는 프로그램을 시작할때 가장 먼저 실행되는 함수입니다.

 

2. 문자열

문자열 리터럴은 쌍따옴표를 이용해 정의합니다. ex. "Hello"

escape sequence : 특정 문자 앞에 역슬래시를 붙인 문자의 조합

- \n 개행문자

- \t 탭

- \" 따옴표

- \\ 역슬래시

 

3.룬

단일문자을 표현하는 룬리터럴은 작은따옴표를 사용해 정의합니다. ex. 'a'

unicode를 사용하며 문자 자체가 아니라 숫자 코드를 이용하므로 Println('a')를 하게되면 문자 a가 아니라 숫자 65가 출력됩니다.

 

4.숫자

숫자 리터럴은 그냥 숫자로 정의합니다. 정수(int)와 부동소수점 숫자(float64)를 서로 다른 타입으로 취급합니다.

 

5.변수의 선언

Go는 정적타입의 언어입니다. 따라서 프로그램이 실행되기 전에 변수의 type을 알 수 있습니다.

 

reflect.Typeof() 함수로 변수의 타입을 알 수 있습니다.

reflect.TypeOf("haha")=> string

 

Go언어에서 변수는 다음과 같이 선언합니다.

 

var quantity int

(keyword) (변수명) (타입)

 

타입을 변수명 다음에 명시하는 것이 제가 공부했던 다른 언어들과 차이가 있는 것 같네요.

 

var quantity int = 1

 

선언과 할당을 동시에 하는것도 위처럼 가능합니다.

 

var length, width int = 1,2

 

위와 같이 한번에 여러개의 변수도 선언 가능합니다.

 

사실 Go 언어에서는 선언과 할당을 같이할때에는 변수의 타입을 적어주지 않아도 자동으로 지정이 됩니다.

따라서 아래와 같은 문법도 유효합니다.

 

var length = 2

 

6. 제로값

 

선언 후 할당을 하지않는 경우에는 제로값으로 초기화가 됩니다.

타입별 제로값은 다음과 같습니다. 

 

숫자형 : 0

문자열: ""

boolean: false

 

7. 단축변수선언

 

Go 언어 소스코드를 보면 눈에 띄는 특이한 문법이 있는데요, 바로 이런 문법입니다.

quantity := 4

 

위 코드는 변수의 선언과 할당을 같이 하는 단축 변수 선언입니다. 선언과 할당을 같이 하기때문에 type이 자동으로 지정됩니다. 위에서 본 var를 사용하는 선언방법보다 짧고 간단해서 더 자주 사용된다고 합니다.

 

 

8. 상수선언

go 언어에서의 상수 선언은 다음과 같습니다. 타입은 자동으로 지정되기때문에 적어주지않아도 무방합니다.

const length int = 2

 

변수와 달리 상수는 선언 후 사용하지 않아도 에러가 나지않습니다만,

선언만 하고 할당을 하지않으면 에러가 발생합니다. 상수는 그 특성상 한번 선언한 후에는 수정이 불가하기 때문입니다.

 

한번에 상수를 여러개 선언하는 문법도 가능한데요, 이때 여러가지 자료형을 한번에 선언하는 것도 가능합니다.

const (
  a = "haha"
  b
  c
  d = 1
)

 

뭔가 코드에 이상한 점이 있을텐데요, b와 c에 값이 없죠. 이때는 예외적으로 할당을 생략할 수 있습니다.

위와 같은 코드에서 b와 c는 a와 같은 값으로 할당됩니다.

 

9. Convention

Go 언어에서 모든 변수, 함수, 클래스명은 Camel case로 작성합니다.

함수의 경우에는 첫자가 대문자이면 exported되어서 패키지 외부에서도 사용이 가능합니다.(public)

소문자라면 동일한 package 내에서만 사용이 가능합니다.

 

Go언어에서는 선언된 모든 변수, 함수는 반드시 한번 이상 사용이 되어야합니다.

그렇지 않으면 에러가 발생합니다. 단순함이 원칙인 Go 언어의 철학이 반영된 부분인 것 같네요.

 

10. Type conversion

Go언어에서는 다른 type 끼리 연산이 불가능합니다.

예를 들어서

var height int = 10
var width float63 = 1.2

 

일때 height * width을 연산하게되면 에러가 발생합니다.

따라서 이 경우에는 type conversion이 필요한데요, 간단하게 변수를 type으로 감싸주면됩니다.

 

float64(height) * width => 12.0

 

11.Go 소스 코드 실행하기

 

로컬에서 Go 소스코드를 실행하기 위해서는 다음과 같은 과정을 거칩니다.

(Go는 compile언어기 때문에 코드를 실행하기 전에 compile이 필요합니다.)

 

> go fmt hello.go  // 자동 formatting
> go build hello.go // compile
> ./ hello // 실행

> go run hello.go // 컴파일 후 바로 실행 (소스파일은 저장하지않음)

 

제일 앞단에서 Go 언어의 특성이 일관성이라고 했죠. 따라서 Go언어에서는 기본적으로 소스코드 formatting 기능을 제공합니다. compile 전에 코드를 formatting합니다. 그리고 차례대로 소스 코드를 컴파일하고(build), 컴파일후 나온 실행파일을 실행합니다.

 

run 커맨드를 사용하면 컴파일과 실행을 동시에 진행합니다. 다만 소스파일은 저장하지않습니다.

 

 

출처: head first go

댓글