2017-12-28 9 views
-3

나는 go 바이너리를 빌드하고 이것을 실행하라는 말을 듣는다.Go 이진 실행 방법은 무엇입니까?

go build hello-world.go 
$ ls 
hello-world hello-world.go 

./hello-world 
hello world 

그래서 go build hello-world.go는 사람이 읽을 수있는 hello-world.go 파일을 받아 바이너리 파일을 만듭니다.

내 두 가지 질문은 다음과 같습니다

  1. 일반적으로 컴파일 된 코드를 직접 실행되는 파일의 장점은 무엇인가? 그것은 당신의 OSX 또는 다른 의존성에 의존하지 않는가? 어째서?

  2. ./hello-world이 생성 된 바이너리를 실행합니까?

+0

첫 번째 질문은 수십 년 동안 논의되어 왔으며 앞으로도 수천 년 동안 계속 토론 될 것입니다. 너무 짧은 형식으로 대답 할 수있는 방법은 없습니다. 두 번째 질문은 "컴퓨터 101 사용 방법"입니다. 어쩌면 수퍼 유저가 더 나은 곳이 될 것입니다. – Flimzy

답변

0
  1. 컴파일 된 언어 (예 : Golang)와 인터프리터 언어 (예 : Ruby)에 대해 많은 논의가 있지만 일반적으로 컴파일 단계가 코드를 최적화하고 대상 컴퓨터가 기본적으로 프로그램을 인터프리터 (추가 레이어)를 사용할 필요없이 설치할 수 있습니다.
  2. 모든 바이너리는 동일한 OS와 아키텍처간에 이식 가능합니다. 즉, 64 비트 Linux 아키텍처에서 Golang 응용 프로그램을 컴파일하면 32 비트 Linux 아키텍처에서 실행할 수 없습니다.
  3. Linux 및 Unix 기반 시스템에서 바이너리를 실행하는 표준 방법입니다. 이진 파일이없는 경우 ./ 접두사가 필요합니다. $PATH
+0

"근본적으로 컴파일 된 언어는 빠릅니다"- 오해의 소지가 있으며 100 % 정확하지 않습니다. 재귀 알고리즘을 구현하고 "해석 된"nodej가 컴파일 된 성능을 얼마나 능가하는지보십시오. JIT 언어를 사용하면 컴파일/해석 언어에 대해 성능 포인트가 명확하지 않습니다. 나는 그 항목을 완전히 제거 할 것이다. – zerkms

+0

자, 다시 말하자면 "기본적으로" –

+0

"해석 된"언어가 런타임에서 최적화되기보다는 일반적으로 빠르다는 것을 말하게합니다. 일부 언어는 컴파일되었지만 대상 플랫폼에서 런타임에 몇 가지 추가 최적화를 수행합니다. jvm, .net. 전체 항목 # 1은 심각하게 오해의 소지가 있습니다. – zerkms

0

./hello-world가 생성 된 바이너리를 실행하는 이유는 쉘 스크립트의 개념에 기반합니다. bash에 대해 bash 파일을 모두 #!/bin/bash으로 생각하면 쉘 엔진에서 실행 가능한 쉘 스크립트임을 나타낼 수 있습니다. 이 파일을 권한에 따라 실행 가능하게 만들면 파일이.,. /file.sh, 인터프리터가 트리거되기 때문에 이 경우에는 동일한 방식으로 작동하도록 구성됩니다. Brian Kernighan은 UNIX를 만들었고 Golang 팀에도 있었기 때문에 파일 실행 개념이 구조적으로 구워졌습니다.

컴파일 된 코드의 장점은 런타임에 정적 분석을 가능하게합니다. Go는 강력한 유형의 언어입니다. 이것은 컴파일 된 코드가 수많은 최적화의 가능성을 허용하기 때문입니다.