Programming Language/go

Print Hello world, 표준 입출력

김크리 2022. 7. 13. 00:00

go언어

 

구글이 개발한 프로그래밍 언어
빠른 성능, 안정성, 편의성, 쉬운 프로그래밍을 목표로 개발
C언어 기반의 간결한 객체지향 언어

 

go언어의 대표 사용처

  • 클라우드 환경을 위한 오픈 소스 프로젝트의 상당수가 go언어로 개발되어있다. (kubernetes, docker,...)특징
  • 탄탄한 기본 라이브러리
  • 메모리 관리 능력
    • C, C++처럼 네이티브 바이너리를 만들어내는 컴파일 언어
      • 네이티브 바이너리 형식의 이점으로 실행파일 하나로 환경 설정이 필요 없이 배포와 관리 가능
    • 자동으로 메모리를 관리해주는 가비지 컬렉터를 내장
    • 멀티 프로세서, 멀티 스레드 환경에 최적화된 설계
      • 고루틴(go routine)을 사용하여 간단한 문법으로 작동 가능
      • 고루틴을 통해 동기화 과정 없이 채널로 고루틴간 데이터 공유 가능형식
      • 정적타입
  • 컴파일 시점에 결정되는 자료형
  • 동적타입은 런타임 시점에 타입이 결정되는 자료형
  • 고언어는 정적 타입 언어이다.

강타입(strongly-typed)

 

강력한 타입 검사를 통해 버그 최소화

 

  • 자료형이 달라도 컴파일 또는 실행 시점에 정해진 규칙에 따라 임시적 형변환(implict conversion)을 지원 받을 수 있는 타입을 약타입(weakly-typed)이라고 한다.
  • 고언어는 대표적인 강타입 언어이므로, 컴파일 또는 실행시 자료형이 다르면 에러를 발생 시킨다.컴파일 언어
  • 프로그래밍 언어는 컴파일언어, 인터프리터 언어로 나눌 수 있다. 대표적으로 인터프리터 언어는 python이 있으며 스크립트 언어라고 부른다.
  • 고언어는 컴파일 언어로 소스 코드를 컴파일하여 기계어 형태로 된 실행파일(바이너리)를 만든다. 그리고 실행파일은 CPU에서 바로 실행이 되어 속도가 빠르다.가비지 컬렉션(Garbage Collection, GC)
  • 실행파일 내에 메모리를 관리해주는 GC가 존재하여 메모리 관리에 대한 관리비용을 줄인다.병행성(concurrency, 동시성)
  • 병행성 : 동시 처리의 논리적인 개념, 단일 코어에서 여러 쓰레드를 생성하면 동시적으로 실행되는 것으로 보이지만 순차적(시분할)로 실행되는 것이다.
  • 병렬성 : 동시 처리의 물리적인 개념, 작업을 여러 코어에 나누어 동시에 처리하는 상태
  • 고루틴
    • go 키워드를 이용하여 함수 여러 개를 동시에 실행
    • 채널을 통해 고루틴간 통신을 할 수 있다. CSP(Communicating Sequential Processe)라는 프로세스간 통신패턴이며 수학적 개념을 따른다.모듈화 및 패키지 시스템
  • python pip, ruby gem, node npm 등과 같은 패키지 시스템을 통해 패키지간 의존성을 쉽게 관리할 수 있다.
    • import 키워드로 저장소 주소를 지정한 뒤, go get, go install 명령을 사용하여 의존성을 관리할 수 있다.기본 프로젝트 구조
+-- project
  +-- bin
  +-- pkg
  +-- src
    +-- directory
      +-- hello.go
  • bin : 소스 파일(패키지)을 컴파일하여 실행 파일(바이너리)이 생성되는 디렉터리
  • pkg : 패키지를 컴파일하여 라이브러리 파일이 생성되는 디렉터리
  • src : 소스 파일이 저장되는 위치

print "Hello, world!"

package main
import "fmt"

func main() {
    fmt.Println("Hello, world!")
}
  • fmt 패키지를 사용하여 표준 입/출력함수 지원
    go run hello.go
  • go로 작성한 코드를 바로 실행
    go mod init [module]
  • go 로 작성한 패키지의 현재 종속성 정보를 담는 go.mod 파일 생성
  • module은 실행 파일 위치로 진행
  • module의 위치는 $GOPATH 존재
  • go 1.16 version 부터 go 프로젝트의 종속성 정보를 담는 go.mod 파일의 생성이 필수가 되었다.
    go build
  • 작성한 코드 빌드
  • 패키지가 있다면 모듈 파일에 패키지 내용을 추가하고 없으면 다운로드 후에 추가한다.
  • 작성한 코드를 실행 할 수 있는 실행파일 생성
    gi tidy
  • 소스 내 의존성을 go.mod 파일에 정리

fmt 패키지

  • 콘솔(터미널)에 글자를 출력하는 표준 출력
  • fmt.Print() : 값을 그 자리에 출력
  • fmt.Println() : 값을 출력한 뒤 새 줄로 넘어감(print LiNe)
  • fmt.Printf() : 값을 포멧 형식에 맞추어 출력 (print Format)


문법 스타일 강제

  • 코드의 가독성과 일관성을 위해 문법 스타일 강제
  • gofmt이라는 문법스타일 자동 교정 명령 제공