'2016/02/28'에 해당되는 글 4건

Go 개발환경 설치는 어렵지 않다. 

우선 Go SDK 를 다운로드 받고, IDE 만 준비되면 된다.

Go 설치
공식 홈페이지인 golang.org 사이트에 가서 자신의 OS 에 맞는 GO SDK 를 다운로드 하고 설치한다.


설치가 완료되면 Terminal (Windows 는 Command Prompt)에서 go version 으로 설치가 잘 되었는지 확인한다.

버전이 보이면 잘 설치된것이다.


▌Lite IDE 설치
이번에는 LiteIDE 를 설치해본다. Source 로 빌드할 수도 있지만 소스를 수정할 일이 없으므로 바이너리를 다운로드 받아 실행해본다.
1. X28 버전 다운로드
2. /usr/local 밑에 압축 풀기
3. LiteIDE.app 실행


▌Workspace 디렉토리 구조
Go 언어는 언어 자체적인 패키지 관리를 한다고 앞서 이야기 하였다. 이런 관계로 Go 는 특정한 구조의 디렉토리와 이러한 디렉토리의 위치를 알기 위한 환경변수 설정이 필요하다.

원하는 Workspace 디렉토리를 결정하고 만든다. 나는 /Users/korean44/src/go_workspace 를 Workspace 로 결정했다.

Workspace 디렉토리는 GOPATH 라는 이름의 환경변수로 정의되어 있어야 go 언어가 이후 개발할 프로젝트에서 import 를 통해 지정한 패키지가 없을 때 GOPATH 에서 찾거나 없는 패키지를 다운로드 받아 $GOPATH/pkg 디렉토리에 저장한다

GOPATH 디렉토리의 구조는 아래와 같다.

우리가 myproject 를 만든다면 위 처럼 GOPATH(Workspace)/src 밑에 프로젝트를 만들면 된다.
GOPATH 를 Workspace 로 볼 수도 있지만, 단일 Project 를 GOPATH 로 잡을 수도 있다. 그러면 해당 프로젝트의 구조가 저렇게 bin, pkg, src 처럼 정형화 되어 깔끔해질 수도 있다.

▌환경변수

위에서 GOPATH 환경변수가 필요하다는 것을 알았으므로 일단 .profile 이나 windows 의 경우 환경변수를 편집하여 GOPATH 변수를 추가해준다.

go 와 관련된 환경변수는 go env 를 실행하면 출력된다
macbook-joon:go_workspace korean44$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/korean44/src/go_workspace"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GO15VENDOREXPERIMENT="1"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics 
            -Qunused-arguments -fmessage-length=0 -fno-common"

CXX="clang++"
CGO_ENABLED="1"
macbook-joon:go_workspace korean44$ 

이중에
$GOROOT : go 가 설치된 경로
$GOPATH : 위에서 설명한 GOPATH. Workspace 로 이해가 편하도록 설명하였으나 사실은 Dependency 관리를 위해 참조할 pkg, src 디렉토리와 go install 시에 실행파일을 위치시킬 bin 디렉토리를 포함하는 지정 구조의 디렉토리 루트가 필요해서 지정하는 것이다.

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
Go 로 응용프로그램을 개발하기 위해서는 일단 Go SDK 를 설치하여야 한다.
그후 개발자라면 고민하게 될 것은 바로 IDE 이다. 

Go SDK 와 텍스트 편집기만 있으면 개발 가능하다고 Golang 사이트에서는 이야기 하지만 사실 어떤 언어이건 텍스트 에디터만 있으면 개발되지 않는 언어가 어디있겠는가? 하지만 디버깅을 하고 파라미터 정보를 보여주고 Definition 이나 Reference 를 보여주는 등의 기본적인 개발지원 기능이 있는 IDE 가 없다면 어떠한 개발자라도 왠만한 이유 아니면 그 언어로 개발하려고 하지 않을것이다.

Go 언어는 아직 나온지 얼마 안된 언어인 탓에 Go 언어를 지원하는 제대로된 IDE 는 아직 그리 많지 않은편이다 (Java 나 C/C++ 의 IDE 들은 정말이지 아직 Go 의 IDE 들에게는 넘사벽이다)

Cloud 에디터, 텍스트 편집기의 Syntex Highlight 플러그인을  제외한 Go 언어를 위한 대표적인 설치형 IDE 는 아래와 같다.

Eclipse - GoClipse : Eclipse 의 플러그인
GoWorks - Netbeans 의 플러그인이나 Netbeans 기반의 Standalone 형태로 사용
IntelliJ IDEA - IntelliJ IDEA 용 플러그인
LiteIDE - Go 언어 전용의 IDE 로, Go 언어 릴리즈 초기부터 함께한 IDE
Visual Studio - Visual Studio 용 플러그인
그외에 상용 IDE 로는, KomodoIDE, Zeus 등이 있음

위 IDE 들 중 빠르고 깔끔한 LiteIDE (크로스플랫폼지원)를 Go 개발자들이 가장 많이 사용중이므로 본 강좌에서도 이 IDE 를 기준으로 하도록 한다.

Lite IDE 중에서도 Mac 버전을 기준으로 하겠으나, 어차피 Qt 기반의 UI 이므로 UI 구성은 Windows 나 Mac 이나 Linux 나 유사하여 다른 플랫폼에서도 큰 문제없이 이해가 가능할것이다.
(사실 Windows 에서 주로 작업하지만 당분간 노트북으로 글을 써야하는 상황에 노트북이 맥북 밖에 없다)

반응형

'Software Development > Go (golang)' 카테고리의 다른 글

3.2 Go - 기본 문법 및 Type  (488) 2016.02.29
3.1 Go - Hello World  (5) 2016.02.29
1.3 Go 언어란? - 다른 언어와 비교  (1159) 2016.02.28
1.2 Go 언어란? - 주요 특징  (845) 2016.02.28
1.1 Go 언어란? - History  (518) 2016.02.27
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
IT 를 하며 C, C++, Java, Objective C, JavaScript 와 같은 프로그래밍 언어를 배우고 사용해왔지만 어떠한 언어이든 최고의 언어는 없으며 내가 해야하는 업무나 개발에 최적의 언어만이 있었고, 또 그 업무가 바뀌면 언어는 업무를 위한 수단에 불과하지 않았다.

그럼에도 불구하고 천여개가 넘는 언어들이 생겨나고 또 인정받는 이유는 분명 그 언어가 목표하는 시장이 있으며 그 시장에서 필요로 하는 “효과”를 잘 보여주었기 때문이었다.

Go 언어 또한 목표로 하는 시장이 분명히 있으며, C/C++, Java, JavaScript, PHP, Swift 등등 셀 수 없이 많은 언어들을 제치고 “언어의 왕좌”를 차지하려는 목적으로 개발된 것은 아니다. 

프로그래밍 언어들이 갖는 특성은 모두 제각각이며 언어의 절대적 우열을 가리기 위한 잣대란 존재하지 않는다. 아래 비교자료들은 재미삼아 보는것을 권장하며, 무엇보다 “목적에 맞는 언어”를 선택하는데에 시간을 투자하고, Go 언어 또한 이후 강좌들을 통해 직접 그 장점과 단점을 체감하며 “자신이 느끼는 언어 활용 적합 용도”를 찾기를 바란다.


[인기도에 따른 언어 비교]
RedMonk 의 2016년 1월 프로그래밍 언어 Ranking 이다.

X 축은 Github 내 Project 들이 즐겨 사용하고있는 언어, Y 축은 Stack Overflow 에서의 언어 Tag 를 통한 인기도이다. 두가지를 합쳐보면 최종 Top 10 인기순위는

1 JavaScript
2 Java
3 PHP
4 Python
5 C#
5 C++
5 Ruby
8 CSS
9 C
10 Objective-C
11 Shell
12 Perl
13 R
14 Scala
15 Go
15 Haskell
17 Swift
18 Matlab
19 Clojure
19 Groovy
19 Visual Basic

정도가 된다. Go 언어는 15위에 Rank 했다.
Go 언어가 실질적으로 활용되기 시작한 2011년 부터 보면 5년 남짓 된 언어이며, 이를 감안한다면 다른 언어들 대비 상당히 빠른 속도로 확산되고 있다는것을 알 수 있다.


하지만 여전히 JavaScript, Java, PHP, Python, C/C++ 과 같은 전통적인 언어들이 최상위권에 위치한다. 위 언어들 중 JavaScript, PHP, Python 은 Script 언어이다. 태생 목적과 동작방식 자체가 다르기때문에 이를 직접 비교하는것은 무리일듯 하다. (JavaScript 는 Node.js 를 만나 Java 나 C/C++, Go 가 목적하는 영역과 상당부분의 교집합이 생겨나긴 했다)

아래 자료는 Anderson 과 Retting 의 Fannkuch 라는 이름의 벤치마크 점수이다.
이 벤치마크는 긴 수열을 주고 정렬 작업과 Checksum 작업을 n! 만큼 하는 알고리즘을 수행하는 형태이다. 결과는 최종 수행 시간, 사용한 메모리와 CPU 등이다.
 
× source code secs KB gz cpu cpu load
1.0 C gcc #5 9.16 3,624 910 35.83 95% 99% 99% 99%
1.2 Ada 2005 GNAT #3 11.25 4,116 2100 44.84 100% 100% 100% 100%
1.4 C++ g++ #5 13.12 2,032 1440 51.38 99% 99% 94% 100%
1.5 Rust #2 13.42 8,464 1191 53.10 96% 100% 100% 100%
1.5 Swift #2 13.55 7,036 1152 50.53 91% 99% 90% 93%
1.5 Fortran Intel #3 13.98 10,536 1148 55.74 100% 100% 100% 100%
1.5 C++ g++ 13.98 1,844 1059 54.72 99% 99% 94% 100%
1.6 C gcc #2 14.72 964 1557 57.71 99% 99% 100% 95%
1.7 Scala #2 15.23 36,820 1017 59.62 99% 98% 98% 97%
1.7 C++ g++ #4 15.98 2,024 1439 62.94 98% 99% 98% 99%
1.8 OCaml #3 16.25 22,308 1017 0.01 100% 100% 100% 100%
1.8 Go 16.41 1,884 900 65.25 99% 100% 99% 100%
1.8 OCaml #4 16.49 12,160 1004 0.01 100% 100% 100% 100%
1.8 Lisp SBCL #4 16.58 47,692 1518 64.33 100% 98% 99% 92%
1.9 Pascal Free Pascal 17.39 1,732 1018 69.38 99% 100% 100% 100%
1.9 Java  17.41 33,032 1282 68.64 98% 98% 99% 99%

물론 위의 한가지 알고리즘 계산이 언어의 실행속도를 대표하는것은 아니다. 문자열이나 I/O, 병렬처리 등 언어의 성능을 Benchmark 대상요소는 수없이 많다. Binary Tree 와 정규식 처리 등에서는 Java 가 Go 언어 보다 2배 이상의 좋은 성능을 내며, V8 엔진에서의 JavaScript 가 Java 보다 2배 이상의 성능을 낸다. 
(여기서 다른 알고리즘 실행시간 비교자료들도 볼 수 있다)

향후에 실행시간 이외에도 다른 비교자료를 업데이트 해보도록 하겠다

반응형

'Software Development > Go (golang)' 카테고리의 다른 글

3.1 Go - Hello World  (5) 2016.02.29
2. Go - 개발환경 구성  (524) 2016.02.28
1.2 Go 언어란? - 주요 특징  (845) 2016.02.28
1.1 Go 언어란? - History  (518) 2016.02.27
1. Go 언어란?  (472) 2016.02.27
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
많은 사람들이 Go 언어를 두고 높은 “생산성” 과 “성능”을 위한 언어라고 이야기 한다.

Go 언어의 주요 특징은 아래와 같다.

  • 정적 타입, 강 타입
    C/C++, Java 와 같이 Compile Time 에 Type 결정이 이루어 지며, 코드 내에서 암시적 형변환이 일어나지 않는다.

  • 컴파일 언어
    C/C++, Java, C# 등과 같이 컴파일이 필요한 언어임. Java 나 C# 과 달리 실행파일을 만들어냄.  별도의 Runtime 환경이 필요없어 실행 환경이 복잡하지 않음.

  • 가비지 컬렉션
    실행파일 내에 Garbage Collector 가 탑재 됨.

  • 병행성(Concurrency)
    Multi Thread, Multi Core 에 Go Routine 이라는 단위의 함수실행을 한 Thread 나 Core 별로 동시에 실행시킬 수 있다. Thread 와 Go Routine 은 1:N 관계를 이룰 수 있다.

  • 멀티코어 환경 지원
    Go Routine 간에 “채널” 을 통해 통신하여 데이터를 공유하고 실행 순서를 제어할 수 있다. 제어는 Multi Thread 의 동기화와 비슷하다.

  • 모듈화 및 패키지 시스템npm, pip, gem 이나 Maven과 같은 모듈 의존성에 따른 패키지 관리를 언어 차원에서 지원. 인터넷 상의 패키지들을 바로 가져올 수 있다. import 키워드만 있으면 되며, go get 이나 go install 명령으로 자동으로 패키지들을 가져온다.
    import "github.com/kylelemons/go-gypsy/yaml"
                 ^         ^          ^     ^
                 |         |          |     `-- Package name
                 |         |          `-------- Project name
                 |         `------------------- Author's handle
                 `----------------------------- Hosting site
    
  • 빠른 컴파일 속도
    C/C++ 은 헤더파일 처리 부담으로 컴파일 속도가 느리고 의존관계가 복잡함. Go 는 헤더파일이 없고 소스코드를 패키지화 하므로 변결 시 패키지만 재컴파일 함. 문법도 최대한 단순화 하여 컴파일 속도도 빠르고 생산성이 좋음.

참고로, Go 언어를 사용해본 한 개발자 분은 Go 에 대해 이렇게 이야기 한다.

  1. 컴파일러 언어의 이점 : 저는 컴파일러 언어로 돌아가는 것에 대한 이점을 알고 있습니다. 컴파일러는 프로그램이 실행가능한지 여부를 이론적으로 판단하여 에러를 체크할 뿐 아니라 이후에 문제를 해결하도록 에러를 도출 합니다. Go의 특별한 능력은 아니라 할 수 있지만 Go는 인터프리터와 함께 컴파일 기능을 동시에 가지고 있습니다.
  2. 표준 포맷 : Go는 C나 PHP보다는 엄격한 코딩 포맷을 가지고 있습니다. 파이썬보다는 덜 엄격하지만, 파이썬의 포맷보다 유연합니다.
  3. 작은 언어 : Go는 아주 작고 쉽게 설치가 됩니다. 이는 프로그래밍을 배우고 시작하는데 도움을 줍니다.
  4. 많은 기능 들 : Go언어는 파이썬과 같이 많은 서버프로그램의 기능을 언어 자체에 내장하고 있습니다. 가령, 웹서버를 돌린다거나 소켓 서버를 작성하는 것, OS의 내부 기능을 엑세스하는 것등 파이썬과 거의 유사하게 이용할 수 있습니다.
  5. 쉬운 다중 작업 : Go의 채널과 go루틴은 다중작업을 쉽게 처리하도록 해줍니다. 이는 Node.js와 파이썬의 Twisted보다 나은 기능을 제공합니다. 
  6. 쉬운 시작 : Go를 배우는데 시간이 그렇게 오래 걸리지 않습니다. 개발 환경도 컴파일러와 에디터만 있으면 바로 시작 가능합니다.
  7. 빠른 개발 속도 : Go의 개발 생산성은 무척 높습니다. 언어 내부에 공용 서버 컴포넌트가 있어 복잡한 서버를 빠른 시간안에 작성 할 수 있습니다. 적은 코드는 정확한 기능을 빠르게 만든다는 것을 의미합니다.
  8. 멀티코어 지원, 높은 성능 : 언어의 실행은 놀랍게도 빠르고 안정적입니다. 심지어 파이썬으로 개발하는 사람들에게는 경이적이다는 생각까지 들 정도입니다. 파이썬과 Node.js의 런타임과는 달리 Go의 런타임은 다중 OS 쓰레드를 지원하고, 동시적인 실행기능을 지원합니다.

Go 언어는 서버, 브라우져, Database, 기타 복잡하고 큰 사이즈의 어플리케이션 개발에 유리함. 그러나 엄격한 메모리 제어를 필요로하는 시스템 라이브러리, Device Driver, OS 개발에는 적합하지 않음.


반응형

'Software Development > Go (golang)' 카테고리의 다른 글

3.1 Go - Hello World  (5) 2016.02.29
2. Go - 개발환경 구성  (524) 2016.02.28
1.3 Go 언어란? - 다른 언어와 비교  (1159) 2016.02.28
1.1 Go 언어란? - History  (518) 2016.02.27
1. Go 언어란?  (472) 2016.02.27
블로그 이미지

Good Joon

IT Professionalist Since 1999

,