Top

The Go Programming Language

  • 원서명The Go Programming Language (ISBN 9780134190440)
  • 지은이앨런 도노반(Alan A. A. Donovan), 브라이언 커니건(Brin W. Kernighan)
  • 옮긴이이승
  • 감수자공용준
  • ISBN : 9788960778320
  • 35,000원
  • 2016년 02월 29일 펴냄
  • 페이퍼백 | 408쪽 | 188*255mm
  • 시리즈 : 프로그래밍 언어

책 소개

이 책의 예제는 저자 홈페이지(http://www.gopl.io/)에서 내려받을 수 있습니다.

요약

Go를 배우고자 하는 모든 개발자를 위한 권위있는 『The Go Programming Language』 한국어판

이 책은 구글 Go 개발팀의 일원인 앨런 도노반과 C언어의 대가인 브라이언 커니건이 직접 쓴 책으로, Go의 언어적 특징과 표준 라이브러리를 활용해 깔끔하고 범용적이며 효율적인 프로그램을 개발하는 데 도움을 주고자 한다. 이 책을 통해 언어의 탄생 배경부터 문법, 동시성, 패키지, 테스팅 기법까지 Go의 진면모를 알 수 있을 것이다.

이 책의 특징

이 책은 전체 언어와 가장 중요한 패키지들, 넓은 범위의 애플리케이션을 다루는 수백 개의 흥미롭고 실용적인 예제를 Go 코드로 작성해 제공한다. 각 장에는 이해도를 테스트하고 예제의 확장과 대안을 알아보기 위한 연습문제들도 수록되어 있다. 소스코드는 http://gopl.io/에서 자유롭게 다운로드할 수 있으며, go get 명령으로 손쉽게 반입, 빌드, 설치할 수 있다.

이 책의 구성

1장은 파일 읽고 쓰기, 텍스트 포매팅, 이미지 생성, 인터넷 클라이언트와 서버 간 통신 등의 일상적인 작업을 수행하는 여러 프로그램을 통해 Go의 기본 구성 요소를 설명하는 튜토리얼이다.

2장은 Go 프로그램의 구조적 요소인 선언, 변수, 새로운 타입, 패키지, 파일, 범위 등을 설명한다. 3장은 숫자, 불리언, 문자열, 상수 및 유니코드를 처리하는 방법을 설명한다. 4장은 배열, 맵, 구조체, 슬라이스 등의 간단한 타입을 모으는 조합형 타입을 설명한다. 5장은 함수, 예외 처리, panic, recover, defer문을 설명한다.

따라서 1장에서 5장까지는 대부분이 널리 쓰이는 명령형 언어에 포함되는 기본적인 내용이다. 가끔 Go의 문법과 스타일이 그 외의 언어와 다를 때가 있지만, 대부분의 개발자는 빠르게 적응할 수 있을 것이다. 나머지 장들은 메소드, 인터페이스, 동시성, 패키지, 테스트, 리플렉션(reflection) 등에 대한 Go의 독특한 접근 방식에 초점을 맞춘다.

Go는 객체지향 프로그래밍에 독특한 접근 방식을 택했다. Go에는 클래스 계층은 물론 실제로 클래스 자체가 없다. 복잡한 객체의 행동은 상속이 아닌 간단한 객체의 조합으로 이뤄진다. 메소드는 구조체뿐만 아니라 임의의 사용자 정의 타입과 연관되며, 구상 타입과 추상 타입(인터페이스) 간의 관계가 묵시적이므로 구상 타입은 설계자가 사전에 고려하지 않은 인터페이스도 충족할 수 있다. 메소드는 6장에서, 인터페이스는 7장에서 다룬다.

8장은 CSP의 아이디어에 기반을 두며 고루틴과 채널로 구현된 Go의 동시성에 대한 접근 방식을 제시한다. 9장은 공유 변수를 이용하는 좀 더 전통적인 동시성에 대해 설명한다.

10장은 라이브러리를 구성하는 메커니즘인 패키지를 설명한다. 또한 컴파일, 테스트, 벤치마크, 프로그램 포매팅, 문서화, 기타 여러 작업을 수행하는 단일 명령인 go 도구를 효과적으로 사용하는 방법도 보여준다.

11장은 눈에 띄게 가벼운 접근 방식을 통해 추상화 기반 프레임워크를 간단한 라이브러리와 도구로 대체한 Go 테스팅을 다룬다. 테스트 라이브러리는 필요시 더 복잡한 추상화 단계를 구축할 수 있는 기초를 제공한다.

12장은 프로그램이 실행 중에 스스로의 상태를 살펴볼 수 있게 하는 리플렉션에 대해 알아본다. 리플렉션은 강력한 도구지만 주의 깊게 사용해야 한다. 또한 리플렉션이 중요한 일부 Go 라이브러리를 구현하는 데 어떻게 사용됐는지를 보여줌으로써 리플렉션의 적절한 균형에 대해 설명한다. 13장은 unsafe 패키지를 사용해 Go의 타입 시스템을 우회하는 저수준 프로그래밍의 어려운 세부 사항과 저수준 프로그래밍이 적합한 경우에 대해 설명한다.

저자/역자 소개

지은이 소개

앨런 도노반(Alan A. A. Donovan)

뉴욕에 위치한 구글 Go 팀의 일원이다. 캠브리지와 MIT에서 컴퓨터 과학 학위를 취득했으며, 1996년부터 업계에서 개발을 하고 있다. 2005년부터 구글의 인프라 프로젝트에서 근무했으며, 독자적인 빌드 시스템인 Blaze의 공동 설계자다. Go 프로그램의 수많은 정적 분석 라이브러리와 도구를 만들었으며, 그중에는 oracle, godoc -analysis, gorename 등이 있다.

브라이언 커니건(Brin W. Kernighan)

프린스턴 대학에서 컴퓨터 과학 교수로 재직 중이다. 1969년부터 2000년까지 벨연구소 컴퓨터과학 연구센터의 일원으로 유닉스용 언어와 도구를 개발했다. 『C 언어 프로그래밍』(휴먼사이언스, 2012), 『프로그래밍 수련법』(인사이트, 2008) 등 여러 책의 공동 저자다.

옮긴이의 말

최근 각광받고 있는 Go 언어는 단순성을 가장 큰 특징으로 하며, 이는 표현성을 중시하는 루비(ruby)나 스칼라(scala) 등의 언어와는 정면으로 배치된다. 이 책은 그러한 단순성에 대한 설계 사상을 보여주며, 상세한 샘플 소스와 설명을 통해 이해와 활용을 돕는다.

Go의 설계 사상은 유닉스의 설계 사상과 매우 유사하며, 작고 간단한 기능을 조합해 복잡한 기능을 구현하도록 되어 있다. 처음 Go를 접하는 개발자는 지나친 단순성과 익숙하지 않은 오류 처리 방식에 불편함을 느낄 수 있지만, 이러한 초기의 불편함은 향후 유지 보수 시에 더 큰 이익으로 되돌아올 것이다.

옮긴이 소개

이승

인프라/플랫폼에 관심이 많은 개발자로, 현재 카카오에서 Kubernetes 기반 서비스를 개발하고 있다. 개발자로 은퇴하는 것이 목표다.

감수자 소개

공용준

한양대학교에서 연소해석분야로 석사학위를 취득했다. 연구 중 분산 희박행렬 계산에 대한 분야를 접하면서 정보통신쪽으로 커리어를 쌓고 있다. 2012년에 정통부 산하의 클라우드 정책 연구단 기술고문을 역임했고, 현재는 카카오에서 클라우드 컴퓨팅 셀 리딩을 맡고 있다. 주요 저서로는 『클라우드 API를 활용한 빅데이터 분석』(에이콘, 2015), 『실전 클라우드 인프라 구축기술(한빛미디어, 2014)』이 있다.

목차

목차
  • 1장 튜토리얼
  • 1.1 Hello, World
  • 1.2 커맨드라인 인수
  • 1.3 중복 줄 찾기
  • 1.4 애니메이션 GIF
  • 1.5 URL 반입
  • 1.6 URL 동시 반입
  • 1.7 웹 서버
  • 1.8 미진한 부분

  • 2장 프로그램 구조
  • 2.1 이름
  • 2.2 선언
  • 2.3 변수
  • 2.4 할당
  • 2.5 타입 선언
  • 2.6 패키지와 파일
  • 2.7 범위

  • 3장 기본 데이터 타입
  • 3.1 정수
  • 3.2 부동소수점 수
  • 3.3 복소수
  • 3.4 불리언
  • 3.5 문자열
  • 3.6 상수

  • 4장 복합 타입
  • 4.1 배열
  • 4.2 슬라이스
  • 4.3 맵
  • 4.4 구조체
  • 4.5 JSON
  • 4.6 텍스트와 HTML 템플릿

  • 5장 함수
  • 5.1 함수 선언
  • 5.2 재귀
  • 5.3 다중 값 반환
  • 5.4 오류
  • 5.5 함수 값
  • 5.6 익명 함수
  • 5.7 가변 인자 함수
  • 5.8 연기된 함수 호출
  • 5.9 패닉
  • 5.10 복구

  • 6장 메소드
  • 6.1 메소드 선언
  • 6.2 포인터 수신자가 있는 메소드
  • 6.3 내장 구조체를 통한 타입 조합
  • 6.4 메소드 값과 표현식
  • 6.5 예제: 비트 벡터 타입
  • 6.6 캡슐화

  • 7장 인터페이스
  • 7.1 인터페이스 규약
  • 7.2 인터페이스 타입
  • 7.3 인터페이스 충족
  • 7.4 flag.Value로 플래그 분석
  • 7.5 인터페이스 값
  • 7.6 sort.Interface로 정렬
  • 7.7 http.Handler 인터페이스
  • 7.8 error 인터페이스
  • 7.9 예제: 표현식 평가기
  • 7.10 타입 검증
  • 7.11 타입 검증으로 오류 식별
  • 7.12 인터페이스 타입 검증으로 동작 조회
  • 7.13 타입 변환
  • 7.14 예제: 토큰 기반 XML 디코딩
  • 7.15 몇 마디 조언

  • 8장 고루틴과 채널
  • 8.1 고루틴
  • 8.2 예제: 동시 시계 서버
  • 8.3 예제: 동시 에코 서버
  • 8.4 채널
  • 8.5 병렬 루프
  • 8.6 예제: 동시 웹 크롤러
  • 8.7 select를 통한 다중화
  • 8.8 예제: 동시 디렉토리 탐색
  • 8.9 취소
  • 8.10 예제: 채팅 서버

  • 9장 공유 변수를 이용한 동시성
  • 9.1 경쟁 상태
  • 9.2 상호 배제: sync.Mutex
  • 9.3 읽기/쓰기 뮤텍스: sync.RWMutex
  • 9.4 메모리 동기화
  • 9.5 게으른 초기화: sync.Once
  • 9.6 경쟁 상태 검출
  • 9.7 예제: 동시 넌블로킹 캐시
  • 9.8 고루틴과 스레드

  • 10장 패키지와 Go 도구
  • 10.1 소개
  • 10.2 임포트 경로
  • 10.3 패키지 선언
  • 10.4 Import 선언
  • 10.5 공백 임포트
  • 10.6 패키지 이름 짓기
  • 10.7 Go 도구

  • 11장 테스트
  • 11.1 go test 도구
  • 11.2 테스트 함수
  • 11.3 범위
  • 11.4 Benchmark 함수
  • 11.5 프로파일
  • 11.6 Example 함수

  • 12장 리플렉션
  • 12.1 왜 리플렉션인가?
  • 12.2 reflect.Type과 reflect.Value
  • 12.3 재귀 값을 출력하는 Display
  • 12.4 예제: S- 표현식 인코딩
  • 12.5 reflect.Value로 변수 설정
  • 12.6 예제: S-표현식 디코딩
  • 12.7 구조체 필드 태그 접근
  • 12.8 타입의 메소드 표시
  • 12.9 주의 사항

  • 13장 저수준 프로그래밍
  • 13.1 unsafe.Sizeof, Alignof, Offsetof
  • 13.2 unsafe.Pointer
  • 13.3 예제: 깊은 동등성
  • 13.4 cgo를 통한 C코드 호출

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.76 : 13행]

[p.111: 아래에서 6행]

[p.111 : 아래에서 1행]
빈 슬라이스는 nil과 비교할 때 외에는 길이가 0인 슬라이스처럼 동작한다.
->
nil 슬라이스는 nil과 비교할 때 외에는 길이가 0인 슬라이스처럼 동작한다.

[p.127 : 아래에서 7행]
큰 구조체 유형은
->
큰 구조체 타입은

[p.145 : 1행]
Go 외의 언어에서는 함수가 구현됐음
->
함수가 Go 외의 언어에서 구현됐음

[p.147 : 아래에서 3행]
추가거나
->
추가하거나

[p.183 : 10행]

[p.215: 아래에서 6행]
서버가 중단(또는 시작 실패)돼
->
서버가 중단(또는 시작 실패)되면

[p.232 : 아래에서 4행]
부분과 유사한다.
->
부분과 유사하다.

[p.262 : 아래에서 4행]
대기와 닫기 두 작업은 sizes 루프에서 동시에 일어나야 한다.
->
대기와 닫기 두 작업은 sizes 루프와 동시에 일어나야 한다.

[p.395 : 아래에서 5행 ]
당ㅁ
->
다음