이론 정리/Golang

Golang의 기초

철매존 2022. 7. 24. 14:49
728x90

Go언어에 관하여

Go의 역사

GO언어는 2009년에 Google에서 만들어진 오픈 소스 프로그래밍 언어이다.
그리고 GO는 UTF-8을 기본 문자로 갖는다.

Go의 특징

pakage

Go는 1개의 main package와 여러 개의 다른 package를 가지고 있다.
원하는 기능을 가진 package를 가져와서 사용하면 된다.

main은 시작점이기 때문에 따로 설정해 줄 수 없고 단 한개만을 사용한다.
fmt는 function의 약자이다.(un -> m) fmt는 함수를 정의하기 위해 사용한다.

변수

변수란 값을 저장하는 메모리 공간을 가리키는 이름이다.
값을 저장하는 공간은 크게 하드디스크, memory 두개로 나뉜다.

하드디스크는 느리지만 프로그램이 종료되어도 데이터가 유지된다.
memory는 빠르지만 프로그램이 종료되면 데이터가 없어진다.

변수는 다음의 4가지 속성을 가진다.

var a int = 10가 있다고 치면

  • 이름
    • 이 이름을 통해 변수를 사용할 수 있다.
    • a가 이름이다.
    • 변수가 존재하는(값을 저장하는) 공간이다.
    • 즉 a라는 변수가 가진 메모리 공간 10이 적히게 된다.
  • 주소
    • 메모리 상의 위치를 나타내기 위해 사용하는 것이 주소이다.
    • 컴퓨터 입장에서는 사실 이 주소가 중요하다. -> 어떤 변수를 찾아갈 때에 컴퓨터는 이 주소를 기준으로 찾아가기 때문이다.
  • 타입
    • 타입은 int이다.
    • 이를 통해 size를 알 수 있다.
      • type이 결정되면 size가 정해지기 때문이다. -> type에 맞추어 저장될 size를 고정시키기 때문

변수 타입에 대해

숫자 타입

정수랑 실수이다.

  • uint8
  • uint16
  • uint32
  • uint64
  • int8
  • int16
  • int32
  • int64
  • float32
  • float64

uint형은 unsigned int형이다.

  • byte
    • uint8과 같은친구인데, 별칭타입이다.(aliasing 타입)
      • 왜냐면 byte형식이 부호없는 8비트짜리라서임
  • rune
    • 그래서 rune은 int32의 별칭타입이다.
    • 문자 1개를 나타내는 친구이다.
      • 그러니까 rune이 모이면 string이 될 것이다.
    • go는 UTF-8이니까 이 하나의 문자는 1~3byte이다.
      • 그러니까 이걸 저장하려면 적어도 3byte짜리로 해야 할 것이다.
        • 근데 컴퓨터는 2의 배수로 값을 증가시킨다(2진수를 쓰기 때문)
          • 그래서 4byte짜리를 쓰는건데, 그게 int32형이라서 그럼ㅇㅇ
  • int
    • 이거는 컴퓨터에 따라 달라진다.
    • 32bit 컴퓨터는 int32가 된다.
    • 64bit 컴퓨터는 int64가 된다.
    • 요즘은 근데 어지간하면 64bit를 쓰니까 int64가 될 것이다.
  • uint
    • 위랑 마찬가지로 생각해주면 된다. 다만 unsigned 형태인것 뿐.

그 외 타입

  • bool
  • string
  • 배열
  • 슬라이스
  • 구조체
  • 포인터
  • 함수타입
  • 인터페이스
  • 채널

이거는 나중에 배우게 될 것이다.

별칭 타입

위에 적혀있는 rune, byte, int등등 애들도 별칭 타입이다.
이 별칭 타입은 어떤 타입에 다른 이름을 부여하는 것이다.

type으로 정의해줄수 있다.
예를 들어

type chanHandsome int 라고 하면
chanHandsome타입은 int의 별칭타입이 되는 것이다.

변수 선언하기

var a int = 10

var a int

var a = 10
-> 이거는(type 생략시) 뒤에 숫자를 생략할 수 없다. 그리고 이렇게 되면 뒤의 타입에 맞추어 var이 정의된다. 여기서는 int형으로 정의될 것이다.

a := 10
-> var이랑 type 두개 다 생략 가능하다.
-> := 는 선언대입문이다. var를 그냥 저렇게 쓸 수 있음.

type별 기본값

nil은 나중에 다시 배우게 될 것이다.

Type변환

연산의 각 항목의 타입은 반드시 같아야 한다.

예를 들어서

var a int = 10
var b int16 = 20
a + b

이러면 go에서는 이게 안된다. (강타입, 그중에서도 굉장히 강한 언어이기 때문이다.)
그래서 이것들을 해주려면 Type을 변환시켜주어야 한다.

Type별 값의 범위

Type변환 주의사항

package main

import "fmt"

func main() {
    var a int16 = 3456
    var b int8 = int8(a)

    fmt.Println(a, b) 
}

이렇게 하면

요런 결과가 나온다.

이거는 이제 overflow되어서이다.
그러니까 타입 변환할때 이런걸 조심하자...

'이론 정리 > Golang' 카테고리의 다른 글

Go의 GC에 대해 (feat. java)  (1) 2022.10.31
Golang의 포인터  (0) 2022.07.24
Golang의 구조체  (0) 2022.07.24
Golang의 배열  (0) 2022.07.24
Golang - 고랭 이란??  (0) 2022.07.24