출처 : http://mytalkhome.tistory.com/841

그동안 미루어만 왔던 GO언어!

오늘 드디어 그 첫 삽을 펐습니다ㅎㅎ

 오늘 한거라고는 인텔리J 를 이용해서 GO를 개발할 수 있도록 개발환경을 구성해보았습니다.


아직 GO언어는 이렇다하게 딱 정립된 IDE가 없어서 vim 이나 Coda , sublime text 로 코딩해서 많이 합니다

( 아 저는 MAC으루 개발합니다^^ )

그래도... 안드로이드 스튜디오 , 스프링 개발할때 인텔리J를 사용하고 있어서 GO도 마침 플러그인이 있길래 셋팅해보았습니다



셋팅 환경

OS: MAC OS X 10.10.4

IntelliJ 14.1.4

GO: 1.4.2 darwin/amd64



1. 설치

- 졸업한지 몇년이 흘렀지만.. 학교 이메일이 아직 그대로 있어서 학생무료로 설치했습니다. edu등 학교이메일이 있으면 1년단위로 모든제품을 무료로 사용가능합니다! 1년뒤에 다시 인증하면 그만! 

- GO만 개발하실거면 커뮤니케이션 버전사용하셔두 됩니다. 전 스프링 개발때문에.. 무튼 사용하시고자 하는 버전을 받으시구요( 여기선 얼티메이트 버전으로 설명 )

- OS맞게 받으세요 전  MAC입니다.


IntelliJ IDEA 14 

다운로드: https://www.jetbrains.com/idea/download/




GO

다운로드: https://golang.org/dl/

* 본인의  OS맞게 설치해주세요. MAC의 경우 Apple OS X 를 다운하셔서 설치하시면 따로 설정잡아주실건 없습니다




2. GO 플러그인 설치

- 플러그인을 알파버전을 사용하셔야 합니다. 그렇지 않으면 go언어 최신버전이 대응되지 않아요~


[ Configure -> Plugins 선택 ]



[ 하단의 "Browse repositories.." 선택 ]



[ Manage repositories... 선택 ]



[ + 버튼 선택 ]




https://plugins.jetbrains.com/plugins/alpha/5047


[ 위 URL 을 추가해주세요  ]




[ 상단의 Repository: All 에서 추가하신 URL 을 선택해주세요 ]



[ 그럼 위처럼 GO가 있을텐데 해당 플러그인을 설치해주시면됩니다.  전 이미 설치해서  Install 버튼이 안보이는거에요 ~ ]




3. Hello world 찍어보기

- 모든 개발의 시작 헬로우월드를 찍어볼까요?


[ Create New Project 를 선택합니다 ]



[ 플러그인 설치가 잘되었다면 "Go" 가 있을겁니다. Go를 선택하고  Next를 눌러주세요 ]


[ 저는 이미 한번설정해서 SDK가 등록되어 있지만,  최초에는 없으므로 "Configure..." 을 클릭해주세요 ]



[ Go가 설치된 경로를 지정해주세요 , go 폴더까지만 선택하시면 됩니다 ]



[ 프로젝트 타이틀을 지정하시고 Finish를 클릭해주세요 ]


[ 샘플 카도를 하나 작성하시구요 ]


[ 실행하시면 결과가 딱~ 나옵니다 ^^ ]


* warning: GOPATH set to GOROOT (/usr/local/go) has no effect 문구가 뜰경우?

MAC

$  cd ~

$ vi .profile


아래 구문추가( 자신의 go설치경로로 바꾸세요 )

export GOROOT=/usr/local/go

export PATH=$PATH:$GOROOT/bin



앞으로  go언어 관련해서 계속 작성할 예정입니다

배우면서 하는거라 엉성할 수 있으니 이상한 부분은 언제든지 지적해주세요


감사합니다


#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





#02 Go 언어 설치


- 이번 챕터에는 간단하게 Go언어 설치와 IDE 설치하여 유명한 Hello World까지 진행하겠습니다.

- 윈도우 10을 기준으로 설치를 진행하겠습니다.


Go 버전은 1.7이며

IDE는 LiteIDE로 선정하였습니다.


비주얼스튜디오에 익숙해서 그쪽으로 플러그인을 찾아봤습니다.

2013까지 지원하는 버전이었습니다만... 제가 2015버전인 관계로 ... 일단 패쓰하였습니다.

2015 버전지원이 되면 저도 그쪽을 이용해보고 괜찮으면 그쪽으로 갈아탈 예정입니다.



=> 설치파일  https://golang.org/dl/



Microsoft Windows 버전을 다운로드 받습니다.



 Next 신공후 마무리는 Finish!!!!


LiteIDE 설치파일 URL : https://sourceforge.net/projects/liteide/files/X30.2/


위 페이지로 이동을 하면



제일 상단에 있는 liteidex20.2.windows-qt4.zip을 다운로드 받습니다.


압축은 적당한 작업 폴더에 풀면 됩니다.


압축을 풀면 /bin/liteide.exe 를 실행하시면 됩니다.


우선 Go언어는 각종 패키지를 인터넷에서 다운받아서 사용됩니다. (추후에 자세히 다루겠습니다)

그래서 기준 경로가 있어야 됩니다. 

기준이 되는 경로는 환경변수 설정을 통해서 설정하셔야 됩니다.


시스템 속성에 들어가시면 



환경 변수 클릭!


GOPATH에 작업 폴더를 지정하시면 해당 패키지들이 해당 경로로 받아지게 됩니다.


간단하게 Hello, World를 출력하고 마무리하겠습니다.


파일을 생성후 아래 소스를 작성합니다.



F5를 누르면 빌드되어 실행파일이 만들어집니다.

( 빌드 환경설정은 다음기회에... )


빌드가 성공하면 아래에 Build Output에 아래와 같은 내용이 출력이 됩니다.



실행은 Ctrl + F5를 누르시면 됩니다.



이미 눈치채신 분은 있으시겠지만 비주얼스튜디오의 단축키와 비슷한 부분이 많습니다.


( 제가 다른 IDE로 작업을 많이 못해봤습니다. ;; )


내용이 많이 보이지만 실제 별거 없는 내용입니다.


앞으로 틈틈히 글을 올릴 생각입니다.


부족한 글솜씨에 인내심을 가지고 읽어주셔서 감사합니다.



#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