[The Go Programming Language] 1장 튜토리얼 - 1.1 Hello, World

in #kr-dev6 years ago (edited)

modolee_logo
안녕하세요. 개발자 모도리입니다.
The Go Programming Language 라는 책으로 Go를 공부하고 있으며, 해당 책의 내용을 요약 정리해서 올리려고 합니다. 저는 번역본을 구매해서 공부하고 있습니다.

Go 개발을 위한 환경 구축을 지난 게시물을 참고해 주세요 :)

1장 튜토리얼

1.1 Hello, World

Go 소개

  • Go는 컴파일 언어입니다.
  • Go Toolchain을 이용해서 소스 파일과 다양한 디펜던시들을 컴퓨터의 기본 명령어로 변환합니다.
  • Toolchain은 go로 시작하는 명령을 통해 사용할 수 있습니다.
package main

import "fmt"

func main() {
    fmt.Println("Hello, 세계")
}

예제 코드 [ch1/helloworld.go]

  • 기본 명령어
    • go run : .go 로 끝나는 한 개 이상의 소스 파일을 컴파일 하고 라이브러리와 링크한 후 결과 실행 파일을 구동합니다.

    • 예제 코드 [ch1/helloworld.go]helloworld.go로 저장하고 콘솔 명령창에서 go run helloworld.go 명령을 실행하면 아래와 같이 출력됩니다.

    • Hello, 세계

    • Go는 유니코드를 직접 처리하므로 전 세계 언어로 작성된 텍스트를 처리할 수 있습니다.

    • go run은 주로 테스트를 위해 사용하고, 일회성이 아니라 컴파일 결과를 저장하여 사용하려면 go build 명령을 사용합니다.

    • go build helloworld.go 명령을 실행하면 소스 파일이 저장 된 위치에 helloworld 파일이 생성됩니다.

    • ./helloworld 명령으로 해당 파일을 실행 시키면 위 와 동일한 출력 결과가 나옵니다.

기본 소스 코드 구조

package main // 1. package 정의

import "fmt" // 2. 패키지 import

// 3. 함수 선언, 정의
func main() {
    fmt.Println("Hello, 세계")
}
  1. package 정의
    • 해당 소스파일이 속하는 패키지를 나타냅니다.
    • Go 표준 라이브러리에는 입력과 출력, 정렬, 텍스트 조작 같은 범용 작업을 위한 100개 이상의 패키지가 들어 있습니다.
      • fmt 패키지 : 정형 데이터의 입력, 출력을 위한 함수들이 들어 있습니다.
      • Println : fmt가 포함하는 기본 출력 함수. 출력 후 줄바꿈하는 함수
    • main 패키지 : 라이브러리가 아닌 독립 실행형 프로그램으로 작성할 때 정의
    • main 패키지 안의 main 함수 : 프로그램 실행 시 시작되는 위치
  2. 사용할 패키지 import
  3. 함수, 변수, 상수, 타입 등에 대한 선언, 정의

Syntax, Formatting

  • 문장이 한 줄에 두 개 이상 나오는 경우 외에는 문장이나 선언의 끝에 세미콜론을 요구하지 않습니다.

  • 특정 토큰 뒤의 개행문자가 세미콜론으로 변환되므로 개행문자의 위치는 Go 코드의 적절한 해석에 영향을 줍니다.

    • 함수의 여는 중괄호( { ) 가 func 선언과 같은 줄에 있어야 합니다. 그렇지 않은 경우 syntax error 발생
    func main() 
    {
        fmt.Println("Hello, 세계")
    }
    

    ./helloworld.go:5:6: missing function body
    ./helloworld.go:6:1: syntax error: unexpected semicolon or newline before {

  • 표현식 x + y에서 개행문자는 +의 앞이 아닌 뒤에만 허용됩니다.

    • 정상적으로 동작하는 코드
      func main() {
          var result int
          result = 1 + 2
          fmt.Println(result)
      }
      
    • 역시 정상적으로 동작하는 코드
      func main() {
          var result int
          result = 1 +
              2
          fmt.Println(result)
      }
      
      • 컴파일 에러 발생
      func main() {
          var result int
          result = 1
          +2
          fmt.Println(result)
      }
      

      ch1/helloworld.go:8:2: +2 evaluated but not used

  • Go는 코드 서식에 강경한 입장을 취합니다.

  • gofmt 도구는 코드를 표준 형식으로 재작성하고, go 도구의 fmt 부속 명령은 지정된 패키지 내의 모든 파일이나 기본 값으로 현재 디렉토리의 파일에 gofmt를 적용합니다.

  • goimports 도구는 import 했지만 사용하지 않는 패키지를 삭제하기도 하고, import 하지 않고 사용한 패키지를 추가해 주기도 합니다.

  • Atom의 go-plus 플러그인을 설치할 경우 자동으로 gofmt, goimports가 적용됩니다.


내용이 상세하게 나와 있는 편이라서, 서브 챕터 별로 나눠서 올리려 하는데 내용이 너무 짧거나 설명이 많이 필요 없는 경우에는 여러 챕터를 합쳐서 올릴까도 생각 중입니다. 이번엔... 게으르지 않게 꾸준히 올려볼게요. 감사합니다.

Coin Marketplace

STEEM 0.15
TRX 0.16
JST 0.028
BTC 67814.21
ETH 2401.94
USDT 1.00
SBD 2.34