#03 Go 언어의 타입


- 이번 챕터는 Go 언어에 사용되는 타입과 변수 선언, 문자열에 대해서 알아보겠습니다.

자료형

설명 

범위 

uint8 

부호없는 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 to 9223372036854775807

float32

IEEE-754 32비트 단정밀도 부동소수점, 7자리 정밀도 보장

 

float64 

IEEE-754 64비트 배정밀도 부동소수점, 15자리 정밀도 보장 

 

complex64

float32 크기의 실수부와 허수부로 된 복소수 

 

complex128

float64 크기의 실수부와 허수부로 된 복소수 

 

byte

uint8과 크기가 동일, 바이트 단위로 저장할 때 사용 

 

int32와 크기가 동일, 유니코드 문자 코드를 저장할 때 사용 

 

uint

32비트 시스템에서는 uint32, 64비트 시스템에서는 uint64 

 

int 

32비트 시스템에서는 int32, 64비트 시스템에서는 int64 

 

uintprt

uint와 크기가 동일하며 포인터를 저장할 때 사용 

 


[ 변수 선언 ] 


키워드 변수명 자료형

var i int

var s string


선언과 동시에 초기화를 시켜주면 자료형을 생략 가능합니다.

var i = 10

var s = "string"


키워드 var와 자료형을 생략도 가능합니다.

i := 10

s := "string"


위의 내용을 응용해서 여러개 선언하는 법

var x, y int = 30, 50 // x = 30, y = 50

var x, y = 30, 50 // x = 30, y = 50

x, y := 30, 50



[ 변수 크기 ]


c언어의 sizeof 연산자처럼 변수의 크기 구하기 입니다.

크기는 바이트단위 입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
 
import "fmt"
import "unsafe" // Sizeof 함수를 사용하기 unsafe 패키지 사용
 
func main() {
    var num1 int8 = 1
    var num2 int16 = 1
    var num3 int32 = 1
    var num4 int64 = 1
 
    fmt.PrintIn(unsafe.Sizeof(num1)) // 1
    fmt.PrintIn(unsafe.Sizeof(num2)) // 2
    fmt.PrintIn(unsafe.Sizeof(num3)) // 4
    fmt.PrintIn(unsaef.Sizeof(num4)) // 8
}
cs


[ 문자열 ]


문자열 길이 구하기

len함수를 사용


1
2
3
4
5
6
 
var s1 string = "한글"
var s2 string = "Hello"
 
len(s1) // 6 : UTF-8 인코딩의 바이트 길이이므로 6
len(s2) // 5 : 알파벳 5글자이므로 5
cs


[ 문자열 수정하기 ]


문자열의 문자를 직접적으로 수정할수 없습니다.



[ 상수 선언 ]


const 상수명 자료형 = 초기값


1
2
const i int = 10
const s string = "STRING"
cs




[ 열거형 ]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
const Sunday = 0
const Monday = 1
const Tueday = 2
const Wedday = 3
const Thuday = 4
const Friday = 5
const Satday = 6
 
 
// const () 키워드를 사용시 const를 반복하지 않아도 됩니다.
 
const(
    Sunday = 0,
    Monday = 1,
    Tueday = 2,
    Wedday = 3,
    Thuday = 4,
    Friday = 5,
    Satday = 6
)
 
// 또는 iota를 사용하여 대입연산자를 생략 가능합니다.
 
const(
    Sunday = iota,
    Monday,
    Theday,
    Wedday,
    Thuday,
    Friday,
    Satday
)
cs




#00 Go언어를 접하게 된 계기


인삿말

- 2007년에 클라이언트로 게임업계에 입사를 하였고 MMORPG (C++, 게임브리오엔진) 6년 -> 턴제 모바일게임(C#, 유니티엔진, 아파치, java, mysql) 1년6개월 -> 액션 모바일 (C#, 유니티엔진, Node.js, mssql) 1년10개월 을 제작 하였습니다.


서버에 대한 부족한 지식으로 빠르고 쉽게 웹서버를 만들수 있는 것을 찾던중 Node.js를 접하게 되었고

부족한 제가 정말 쉽게 원하는 기능을 만들었습니다.

물론 아직 Node.js에 대해 깊이 있게 다 이해했다고는 하지 못하지만 점점 Node.js에서 한계를 느꼈습니다.


1. 리눅스에 대한 이해도가 부족하여 윈도우 서버를 택했고 그로인해 Node.js에서의 강력한 모듈들을 사용하지 못한점

2. javascript의 성능과 오타에서 오는 스트레스, 컴파일언어에 대한 그리움

3. Node.js의 메인쓰레드밖에 활용 못한다는 점 (클러스터로 커버 가능은 함)

4. 초반에 잘못된 설계로 인해 callback헬... 추후 대규모 리빌딩.

5. 실시간 서버으로써의 성능 부족함 ( 언어로써의 성능 포함 )

6. 뭔가 새로운걸 찾고싶다는 욕구


+ 위에 나열한건 개인적은 견해이고 Node.js에 대한 잘못된 이해로 인해 잘못 사용하여 제 성능을 못 끌어 냈을수 있습니다. +


Node.js로 인해서 서버에 대해 많은 지식도 쌓고 CBT를 치르면서 부족한 점을 또한번 느끼게 되어 고마운 존재이기도 합니다.


C++로 서버를 제작을 할까 하는 와중에 Go언어를 알게 되었고 새로운걸 공부하고 싶다는 욕구에 시작하게 되었습니다.


앞으로 남길 글들은 사실 절 위한 메모와 같은 내용입니다.


부족하거나 이상한점 잘못된점이 있다면 알려주신다면 감사하겠습니다.







#01 Go 언어 입문기


[ Go 언어 소개 ]

Go 언어는 구글이 개발한 프로그래밍 언어입니다.

2007년에 켄 톰슨, 롭 파이크, 로버트 그리즈머가 최초 설계를 시작했으며 2008년부터 본격적으로 개발되었습니다.

특히 C언어의 모체가 된 B언어와 유닉스의 개발자로 유명한 켄톰슨이 참여하여 큰 화제가 되었습니다.


Go 언어는 빠른 성능, 안정성, 편의성, 쉬운 프로그래밍을 목표로 개발되었습니다.


[ Go 언어 특징 ]

- 정적타입, 강 타입

- 컴파일언어

- 가비지 컬렉션

- 병행성

- 멀티코어 환경 지원

- 모듈화 및 패키지 시스템

- 빠른 컴파일 속도




참조 : 가장 빨리 만나는 Go 언어, https://golang.org/doc/





+ Recent posts