[Go] Data Types

Data Types

Go의 자료형에 대하여.

Table of Contents

Numeric Types

Go에서 숫자는 정수, 실수, 복소수로 표현할 수 있다.

int, uint, float의 뒤에 붙은 숫자는 bits를 말한다.

Numeric Types 에서 별칭을 가진 두 자료형이 존재한다.
아래 자료형의 공통점은 문자(단일문자 또는 문자열)를 나타낼 때 쓰인다는 것이다.

Integers

↑ Return to TOC

Floating-points

Go에서 실수를 표현할때는 ‘고정소수점 방식’과 ‘부동소수점 방식’을 사용할 수 있다.
주의할 것은 컴퓨터는 2진수 기반이면서 한정적인 메모리로 인해 실수를 정확하게 표현하지 못한다.

↑ Return to TOC

Complex numbers

실수와 허수로 이루어진 복소수.
복소수 또한 실수이기에 계산시 정확히 표현이 불가하다.

↑ Return to TOC

Boolean Types

Go 의 불리언 값은 truefalse 로 나뉜다.
Boolean은 논리값을 나타내는 자료형이다.
타 언어와 마찬가지로 조건문에서 유용하게 사용된다.

Boolean with Logical Operators

Boolean은 논리연산자와 함께 쓰인다.

↑ Return to TOC

String Types

Go의 문자열은 uint8 의 series 이다.
Go 에서 uint8byte 라는 별칭을 지니고 있다. 즉, string 은 바이트의 나열이라고 볼 수 있다.

제공되는 문자열 리터럴(string literal)은 총 두가지 스타일로 나뉜다.

Internal Structure

Go 문자열의 내부 구조는 아래와 같이 str, 과 len 으로 이루어져 있다.

type _string struct {
  str *uint8
  len int
}

↑ Return to TOC

Zero Value

빈문자열(empty string)을 통해 문자열의 zero value 를 나타낸다.

위에서 알아보았듯이 문자열의 내부구조는 strlen 으로 이루어져 있다. 빈문자열이라 함은 strnil 의 값을, len0 값을 지니고 있다는 뜻이다.

↑ Return to TOC

Concatenate

문자열은 + 또는 += 연산자를 통해 연결시킬 수 있다.

  s1 := "Baby "
  s2 := "Tiger "
  s3 := "or 8luebottle"
	
  s1 = s1 + s2 // Baby Tiger
  s1 += s3     // Baby Tiger or 8luebottle

↑ Return to TOC

Subslice

s[start:end] 를 통해 문자열을 자를 수 있다.

  s := "Your time is limited, so don't waste it living someone else's life."
  
  start := 5
  end   := 20
  
  s[:start]    // Your
  s[start:end] // time is limited
  s[end+1:]    // so don't waste it living someone else's life.

↑ Return to TOC

Length

문자열의 길이 측정은 built-in 타입인 len 을 통해 한다.
문자열에 저장된 바이트의 개수를 알 수 있다.

  s := "Your time is limited, so don't waste it living someone else's life."

  len(s) // 67

↑ Return to TOC

Element Access

s[i] 를 통해 문자열의 i 요소에 접근할 수 있다.

  s := "It is during our darkest moments that we must focus to see the light."

  // 문자열은 uint8 의 조합이기 때문에 s[13] 은 uint8 형태인 111 로 표현된다.  
  s[13] // 111
  s[19] // 114
  
  // 고유 문자형태로 표현하고자 한다면 string 을 통해 타입변환을 해주자.  
  string(s[13]) // o
  string(s[20]) // k

↑ Return to TOC