Go in Action - 1

김민진·2022년 4월 10일
0

go

목록 보기
1/6

동시성

고루틴(goroutine)은 스레드와 유사하지만 더 적은 메모리를 소비하며 더 적은 양의 코드로 구현할 수 있다.

하나의 스레드에서 여러개의 고루틴을 실행할 수 있다.

고루틴의 오버헤드는 그다지 크지 않으므로 빈번하게 사용한다고 해도 전혀 이상할 것이 없다.

채널

고루틴 간의 안전한 데이터 전송을 가능하게 하는 데이터 구조이다.

채널을 사용하면 공유 메모리 접근을 허용하는 프로그래밍 언어에서 흔히 발생하는 문제들을 손쉽게 피 할 수 있다.

타입 시스템

go는 계층구조가 없는 유연한 타입 시스템을 제공하기 때문에 리팩토링에 대한 부담을 최소화하면서 코드를 재사용할 수 있다.

간결한 타입

go는 int나 string같은 내장 타입을 제공한느 것은 물론 사용자가 직접 타입을 정의하는 것도 허용한다.

작은 동작을 모델링 하는 인터페이스

go는 인터페이스를 구현하고 있다고 선언할 필요조차 없다. 단지 필요한 행위를 구현만하면 된다. 이런 기법을 덕 타이핑(duck typing)이라고 한다. 어떤 생물이 오리처럼 꽥꽥 소리를 낸다면 그 생물은 오리라고 간주할 수 있는 개념이다.

java에서 인터페이스를 정의하는 코드이다.

interface User{
	public void login();
    public void logout();
 }

go에서 가장 자주 사용하게 될 인터페이스중 하나인 io.Reader인터페이스를 구현한 코드이다.

type Reader interface{
	Read(p []byte) (n int,err error)
 }

io.Reader 인터페이스를 구현하는 타입을 작성하려면 바이트의 슬라이스(slice)를 매개변수로 받아들여 정수와 에러를 리턴하는 Read 메서드를 구현하기만 하면 된다.

Go 인터페이스는 훨씬 간단하며 한 가지 동작만을 정의한다.

메모리 관리

메모리를 자동으로 관리하는 가비지 컬렉션을 제공한다.
go의 가비지 컬렉션은 프로그램 실행 시간에 약간의 오버헤드를 유발하지만 개발에 필요한 노력을 획기적으로 줄여준다.

http://play.golang.org 를 통해 코드를 편집하고 실행해 볼 수 있다.

Go는 모던하고 빠르며 강력한 표준 라이브러리를 제공하는 프로그램 언어다.
Go는 동시성 기능을 자체적으로 내장한다.
Go는 코드 재사용을 위한 빌딩 블록(building block)으로서 인터페이스를 활용한다.

프로그램 아키텍처

깃허브의 코드를 참고한다

프로그램의 진입점은 main.go 코드 파일에 작성되어 있다.

코드의 내용은 아래와 같다.

package main

import (
    "log"
    "os"

    _ "github.com/webgenie/go-in-action/chapter2/sample/matchers"
    "github.com/webgenie/go-in-action/chapter2/sample/search"
)

// init 함수는 main 함수보다 먼저 호출된다.
func init() {
    // 표준 출력으로 로그를 출력하도록 변경한다.
    log.SetOutput(os.Stdout)
}

// main 함수는 프로그램의 진입점이다.
func main() {
    // 지정된 검색어로 검색을 수행한다.
    search.Run("Sherlock Holmes")
}
profile
dart,c#,java 개발자! 잡다하게 해서 문제될게 없다!

0개의 댓글