본문 바로가기
Study/Go 언어

[Go언어] 기본 문법 (자료형, 연산자 등)

by Jamie Lim 2020. 7. 18.
사용 교재 : 가장 빨리 만나는 Go언어
1주차 : UNIT 5 ~ 13

- 약 타입 (Weakly-typed) : 자료형이 달라도 컴파일 또는 실행 시점에 정해진 규칙에 따라 암시적 형 변환을 해주는 방식 (ex. C언어)

- 강 타입 (Strongly-typed) : 컴파일 또는 실행할 때 자료형이 다르면 에러를 발생하여 암시적 형 변환을 하지 않음. 또한, 컴파일할 때 타입을 결정하기에 정적 타입이다. (ex. Go 언어)

1. 설치하기

  - Go언어 컴파일러 (자신에게 맞는 운영체제 선택)

    https://golang.org/dl/

 

   - Go언어 IDE

    https://sourceforge.net/projects/liteide/files/

    가장 최신 버전을 선택해 자신에게 맞는 운영체제를 선택해 다운받으시오 

시작화면

2. 자주 사용하는 단축키

  - Ctrl + B : 빌드

  - Ctrl + R : 빌드 및 실행 (디버깅하지 않음)

  - Ctrl + T : 테스트

  - F9 : 브레이크 포인트 설정/해제

  - F5 : 디버깅 시작, 계속(Continue)

  - Shift + F5 : 디버깅 중지

3. Hello, World!로 시작하기 (UNIT 5)

  - go 파일 만들기

파일 생성

 

  - 생성하면 아래와 같이 코드가 만들어져 생긴다

파일 생성

  - Ctrl + R 단축키를 눌러 실행한다

파일 실행

4. 기본 문법 알아보기 (UNIT 6)

  1) ;(세미콜론)
   >
다른 언어에서는 구문이 끝날 때 ;(세미콜론)을 붙이지만 Go언어에서는 생략한

 

   > 한 줄에 여러 구분을 사용할 경우에만 ;(세미콜론)으로 구분한다

   > 빌드하면 자동 줄 바뀜

    * println이기 때문에 첫 줄 출력 후 개행

  2) 주석
   >
한 줄 주석 //
   > Ctrl + /
를 누르면 선택한 영역이 모두 한 줄 주석처리 된

 

  > 범위 주석 /* */

 

  3) 중괄호
   >
함수 혹은 제어문이 시작할 때 같은 줄에 중괄호를 시작해줘야 함
   >
그렇지 않으면 아래와 같은 에러 발생

5. 변수 사용하기 (UNIT 7)

  - Go언어는 다른 언어와는 달리 자료형이 변수명 뒤에 온다

  - 변수명은 문자와 숫자로 이루어진다

  - 문자 또는 _(밑줄)로 시작해야 하며 숫자로는 시작할 수 없다

  - 변수 선언 뒤에 바로 초기화 할 수 있음

  - 자료형을 정하지 않고 변수명에 초깃값을 대입하면 자료형을 생략할 수 있다

  - 형식1 : var 변수명 자료형

 var i int
 var n int = 5
 var num = 10

 

  1)짧은 선언 사용하기

    > :=를 이용하면 var와 자료형 키워드를 사용하지 않고 간단하게 변수를 선언할 수 있다
    > 형식2 :
변수명 := 초깃값

n := 10
s := “hello”

 

  2) 변수 여러 개 선언하기

    > 초깃값의 자료형이 서로 달라도 괜찮음

    > 형식3 : var 변수1, 변수2 자료형 = 초깃값1, 초깃값2

var a, b int = 10, 20

 

    > 형식4 : var 변수1, 변수2 = 초깃값1, 초깃값2

var a, b = 10, 20
var a, b = 10, “hello”

 

    > 형식5 : 변수1, 변수2 := 초깃값1, 초깃값2

a, b := 1, “hello”
a, b, c, d := 1, 1.5, “hello”, false

 

    > 형식6 : 선언 한 뒤 값 대입 / 변수1, 변수2, 변수3 = 1, 2,

var a, b int
var c int
a, b, c = 10, 20, 30

 

    > 형식7 : var()을 통해 여러 개의 변수를 선언하고 초기화할 수 있다

var (
    a, b int = 10, 20
    c, d = 30, “hello
)

 

  < 주의 > 사용하지 않는 변수 및 패키지를 선언하면 컴파일 에러가 발생한다

 

 * 변수 혹은 패키지 앞에 _(밑줄)을 지정하면 사용하지 않는 다는 뜻으로 컴파일 에러를 방지한다
    ex) _ = a   /   import _ “time”

6. 숫자 사용하기 (UNIT 8)

  - Go언어 숫자 자료형 종류

자료형 설명 범위
uint8 부호 없는(unsigned) 8비트, 1바이트 정수 0 ~ 255
uint16 부호 없는 16비트, 2바이트 정수 0 ~ 65535
uint32 부호 없는 32비트, 4바이트 정수 0 ~ 4294967295
uint64 부호 없는 64비트, 8바이트 정수 0 ~ 18446744073709551615
int8 부호 있는 8비트, 1바이트 정수 -128 ~ 127
Int16 부호 있는 16비트, 2바이트 정수 -32768 ~ 32767
int32 부호 있는 32비트, 4바이트 정수 -2147483648 ~ 2147483647
int64 부호 있는 64비트, 8바이트 정수 -9223372036854775808 ~ 9223372036854775807
uint 32비트 시스템에는 unit32, 64비트 시스템에서는 uint64  
Int 32비트 시스템에서는 int32, 64비트 시스템에서는 uint64  
uintptr uint와 크기가 동일하며 포인터를 저장할 때 사용  
float32 IEEE-754 32비트 단정밀도 부동소수점, 7자리 정밀도 보장  
float64 IEEE-754 64비트 배정밀도 부동소수점, 15자리 정밀도 보장  
complex64 float32 크기의 실수부와 허수부로 된 복소수  
complex128 float64 크기의 실수부와 허수부로 된 복소수  
byte unit8과 크기가 동일, 바이트 단위로 저장할 때 사용  
rune int32와 크기가 동일, 유니코드 문자코드를 저장할 때 사용  

 

  1) 정수

    > 8진수는 숫자 앞에 0을 붙이고 16진수는 숫자 앞에 0x를 붙여 사용한다

var n1 int = 10
var n2 int = -10
var n3 int = 012
var n4 int = 0xa

 

  2) 실수

    > 소수점을 사용하거나 지수 표기법으로 표기할 수 있으며 변수에 저장될 때는 부동소수점 방식을 사용
    >
지수 표기법은 e또는 E를 사용하고 +, -로 소수점의 위치를 지정한다 (밑은 10)
    ex) 0.2
를 표현하는 여러 방식

 

    > 10에서 0.9를 뺀 결과를 보면 실수형 값을 연산할 때 오차가 발생함을 알 수 있다

 

  3) 복소수

    > 실수부 + 허수부의 형태로 허수부에 마지막에는 i를 붙여준다
    >
실수부와 허수부는 공정소수점, 부동소수점 형태로 표현한다
    >
변수에 저장할 때 실수부 혹은 허수부를 생략할 수 있다


    > real() :
복소수에서 실수부를 가져올 때 사용
    > imag() :
복소수에서 허수부를 가져올 때 사용


    >
복소수에서 +대신 complex()를 사용할 수 있다

 

  4) 바이트

    > 보통 16진수, 문자 값을 저장한다
    >
실무에서는 바이너리 파일에서 데이터를 읽고 쓸 때, 데이터를 암호화/복호화 할 때 주로 사용한다

 

  5)

    > 유니코드(utf8) 문자 코드를 저장할 때 사용한다
    > ‘ ‘ (
작은 따음표)로 묶어주어 저장한다
    > \u, \U
를 사용헤 유니코드 문자 코드로 저장할 수도 있다 (\U16진수 8자리로 맞춰줘야 한다)

에러 발생의 경우

  6) 숫자 연산하기

    > 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%), 시프트(<<, >>), 비트 반전(^) 연산자 사용
    >
서로 자료형이 다른 숫자를 연산하면 컴파일 에러 발생 -> 자료형 변환이 필요함

 

  7) 오버플로우와 언더플로우

    > 자료형에 저장할 수 있는 최대 크기를 넘어서면 오버플로우(Overflow)
    >
자료형에 저장할 수 있는 최소 크기보다 작아지면 언더플로우(Underflow)
    >
자료형에 넣을 수 있는 최대값 (이 값에 +1을 한 순간부터 오버플로우로 컴파일 에러 발생)

오버플로우로 에러 발생

    > 부호 없는 정수의 최솟값은 0이며 math 패키지에 따로 최솟값이 정의되어 있지 않음 (음수면 컴파일 에러)
    >
부호가 있는 자료형이라면 max값을 구한 것처럼 MinInt8이런 식으로 최솟값을 구할 수 있다

 

  8) 변수의 크기 구하기

    > unsafe패키지의 Sizeof연산자를 이용해 변수의 크기를 바이트 단위로 알 수 있다

7. 문자열 사용하기 (UNIT 9)

  - 문자열은 “” (따음표)로 묶어 UTF-8로 표현

  - 문자열대신 \u를 사용해 유니코드 문자 코드로 저장할 수 있다

  - 여러 줄로 된 문자열을 저장할 때는 ``(백쿼트)로 묶어준다

 

  1) 문자열 길이 구하기

    > len 함수 이용, 한글은 한 글자당 길이를 3으로 인식한다 (utf8로 저장하기 때문)
    >
만약 utf8로 저장한 문자열의 실제 길이를 구하기 위해서는 utf8.RuneCountInString()사용
       (unicode/utf8
패키지 사용)

 

  2) 문자열 연산하기

    > 문자열 비교 시 == 연산자를 사용하고 문자열을 이어 붙일 땐 + 연산자를 사용

 

    > 문자열은 배열과 동일하게 [ ](대괄호)를 사용해 문자를 가져올 수 있다 (0부터 시작)

 

    > 만약 Printf를 쓰지 않으면 아스키코드가 출력됨

 

    > \n과 같은 제어 문자

제어 문자 설명
\a 경고음, (u0007)
\b 백스페이스 (u0008)
\f 폼 피드 (u000c)
\n 라인 피드, 새 줄 (u000a)
\r 캐리지 리턴 (u000d)
\t 수평 탭 (u0009)
\v 수직 탭 (u000b)
\ 백슬래시 (u0005)
작은 따음표 (u0027), rune 변수에 저장할 때 사용
큰 따음표 (u0022),  string 변수에 저장할 때 사용

 

  3) 문자열 수정하기

    > Go언어는 변수에 문자열을 저장한 뒤에는 수정할 수 없다
    >
아예 새로운 문자열을 대입할 수는 있지만 일부 수정은 할 수 없다

일부 수정 시 에러 발생

 

8. (bool) 사용하기 (UNIT 10)

  - 참과 거짓을 표현하는 변수로 크기는 1바이트

  - 보통 AND(&&), OR(||), NOT(!) 논리 연산자 혹은 비교 연산자와 함께 사용한다

경우 1

 

경우 2

    

경우 3

9. 상수 사용하기 (UNIT 11)

  - const 키워드로 상수를 만들어 사용

  - 소스 코드에서 고정된 값을 체계적으로 관리하기 위해 사용

  - 반드시 선언과 동시에 초기화해줘야 한다 (값 변경 불가)

초기화 하지 않아 에러 발생
값을 바꿈으로 에러 발생

 

  1) 변수 선언과 같은 방법으로 여러 개의 상수를 선언할 수 있다

// 방법1
const x, y int = 10, 20
const a, s = 10, “hello”

// 방법2
const (
    x, y  = 10, 20
    a, s = 10, “hello”
)

10. 열거형 사용하기 (UNIT 12)

  - 보통 상수는 요일과 같은 연속된 값을 가진다

  - const()를 사용해 const키워드를 반복하지 않고 선언한다

const(
    Sunday = 0
    Monday = 1
    Tuesday = 2
    Wednesday = 3
    Thursday = 4
    Friday = 5
    Saturday = 6
    numberOfDays = 7
)

 

  - 상수에 값을 일일이 대입하지 않더라도 순서대로 값을 넣을 땐 iota를 사용하면 된다

const(
    Sunday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    numberOfDays
)


  - iota
는 항상 0부터 시작하고 10+iota라는 규칙을 만들어 주었다고 생각하면 된다

 

- 특정 숫자를 생략하려면 해당 부분에 _(밑줄)을 사용하고 넘어가면 된다

 

11. 연산자 알아보기 (UNIT 13)

  1) 기존에 보지 못했던 연산자나 까먹는 연산자만 설명하도록 하겠다

연산자 기능 설명
:= 변수 선언 및 대입 변수를 선언하는 동시에 값을 대입한다
^ XOR 비트 연산 (다항) 두 값을 비트 단위로 XOR 연산을 한다. 사용할 수 있는 자료형은 정수이다
서로 다르면 1, 같으면 0
^ 비트 반전 (단항) 비트를 반전시킨다. 0110으로
&^ AND NOT 비트 연산 두 값을 비트 단위로 XOR 연산을 한다
&= AND 비트 연산 후 대입 현재 변수를 값으로 AND 연산한 다음 다시 변수에 대입
|= OR 비트 연산 후 대입 현재 변수를 값으로 OR 연산한 다음 다시 변수에 대입
^= XOR 비트 연산 후 대입 현재 변수를 값으로 XOR 연산한 다음 다시 변수에 대입
&^= AND NOT 비트 연산 후 대입 현재 변수를 값으로 AND NOT 연산한 다음 다시 변수에 대입한다
특정 플래그를 끌 때 주로 사용한다
<- 채널 수신 연산 채널에 값을 보내거나 값을 가져온다

 

  2) 연산자 우선순위

우선순위 연산자
5 * / % << >> & &^
4 + - | ^|
3 == != < <= > >=
2 &&
1 ||

 

  * gofmt 도구는 연산자가 있는 소스 코드를 입력했을 때 괄호가 없다면 자동으로 우선순위가 높은 쪽의 공백을 삭제해 서로 붙여준다 (우선 순위가 같다면 붙이지 x)

자동으로 공백을 삭제한다

댓글