한빛출판네트워크

IT/모바일

디스커버리 Go 언어

한빛미디어

집필서

절판

디스커버리 Go 언어
좋아요: 35
  • 저자 : 염재현
  • 출간일 : 2016-03-07
  • 페이지 : 324쪽
  • ISBN : 9788968482687
  • 물류코드 :2268

합계 : 19,800

  • 실전에서 쓰는 Go 언어를 익히는 가장 확실한 방법


    Go는 범용 프로그래밍 언어로, 깔끔하고 간결하게 생산성 높은 프로그래밍이 가능합니다. 작성한 코드를 빠르게 컴파일하고 가비지 컬렉션을 지원하며, 정적 자료형 언어이지만 동적 자료형 언어로 프로그램을 작성하는 것 같은 기분을 느끼게 해주는 매력적인 언어입니다. 또한 동시성을 지원하는 코드를 쉽게 작성할 수 있습니다.


    이렇게 멋진 Go 언어를 이 책으로 배워야 하는 이유는 간단합니다. 구글 Go 언어 코드 가독성 승인 권한을 가진 저자가 좋은 코드와 나쁜 코드 그리고 멋진 코드를 두루 살펴보면서 얻은 노하우를 실전에 유용하게 Go 언어를 쓸 수 있게 이 책에 모두 담았기 때문입니다. 이 책을 읽고 난 독자는 Go 언어 문법을 아는 사람이 아닌 Go 언어 프로그래머로 성장하게 될 겁니다.

     

  • [저자] 염재현

    서울대학교 컴퓨터공학부에서 좋아하는 컴퓨터 공부를 하였다. 학교 졸업 후에는 8년 정도 구글에서 소프트웨어 엔지니어로 근무하였다. 관심 분야는 자동화인데, 그중에서도 컴퓨터로 하기 가장 적합한 인간 지능의 자동화다. 무엇이든 비틀어보는 경향이 있고 소시민적 삶을 살면서 작은 고정관념을 깨보는 것이 취미다. 현재 미국 실리콘밸리 마운틴 뷰에 거주한다.

  • CHAPTER 1 시작하기
    1.1 Go 언어 소개 
    __1.2 첫 프로그램 
    __1.2.1 Go 놀이터 
    __1.2.2 기본 예제 코드 
    1.3 자료형 및 변수 
    __1.3.1 변수 선언 
    __1.3.2 자료형 추론 
    1.4 함수와 간단한 제어 구조 
    1.5 마치며 
    1.6 연습 문제 


    CHAPTER 2 환경 설정하기
    2.1 설치하기 
    __2.1.1 압축 파일로 설치하기 
    __2.1.2 소스를 컴파일하여 설치하기 
    __2.1.3 PATH에 go 실행 파일 경로 추가하기 
    __2.1.4 GOROOT 설정하기 
    __2.1.5 Chocolatey로 윈도우 개발환경 간편 설치하기 
    2.2 작업 공간 설정하기 
    __2.2.1 Git 설치하기 
    __2.2.2 작업 디렉터리 (GOPATH) 작성하기 
    __2.2.3 작업 공간 내의 실행 파일들에 PATH 설정하기 
    __2.2.4 내 컴퓨터에서 코드 작성해보기 
    __2.2.5 패키지와 라이브러리 
    2.3 편집기 설정하기 
    __2.3.1 LiteIDE 
    __2.3.2 Emacs 
    __2.3.3 Vim 
    __2.3.4 Atom 
    __2.3.5 Wide 
    2.4 도구 사용하기 
    __2.4.1 godoc 
    __2.4.2 Oracle 
    __2.4.3 Vet 
    __2.4.4 Fix 
    __2.4.5 Test 
    2.5 마치며 


    CHAPTER 3 환경 설정하기
    3.1 문자열 
    __3.1.1 유니코드 처리 
    __3.1.2 Example 테스트 
    __3.1.3 바이트 단위 처리 
    __3.1.4 패키지 문서 
    __3.1.5 문자열 잇기 
    __3.1.6 문자열을 숫자로 
    3.2 배열과 슬라이스 
    __3.2.1 배열 
    __3.2.2 슬라이스 
    __3.2.3 슬라이스 덧붙이기 
    __3.2.4 슬라이스 용량 
    __3.2.5 슬라이스의 내부 구현 
    __3.2.6 슬라이스 복사 
    __3.2.7 슬라이스 삽입 및 삭제 
    __3.2.8 스택 
    3.3 맵 
    __3.3.1 맵 사용하기 
    __3.3.2 집합 
    __3.3.3 맵의 한계 
    3.4 입출력 
    __3.4.1 io.Reader와 io.Writer 
    __3.4.2 파일 읽기 
    __3.4.3 파일 쓰기 
    __3.4.4 텍스트 리스트 읽고 쓰기 
    __3.4.5 그래프의 인접 리스트 읽고 쓰기 
    3.5 마치며 
    3.6 연습문제 


    CHAPTER 4 함수
    4.1 값 넘겨주고 넘겨받기 
    __4.1.1 값 넘겨주기 
    __4.1.2 둘 이상의 반환값 
    __4.1.3 에러값 주고받기 
    __4.1.4 이름 있는 결과 인자(Named return parameter) 
    __4.1.5 가변인자 
    4.2 값으로 취급되는 함수 
    __4.2.1 함수 리터럴(Function literal) 
    __4.2.2 고계 함수(High-order function) 
    __4.2.3 클로저(Closure) 
    __4.2.4 생성기 
    __4.2.5 이름 있는 자료형 
    __4.2.6 이름 있는 함수형 
    __4.2.7 인자 고정 
    __4.2.8 패턴의 추상화 
    __4.2.9 자료구조에 담은 함수 
    4.3 메서드 
    __4.3.1 단순 자료형 메서드 
    __4.3.2 문자열 다중 집합 
    __4.3.3 포인터 리시버 
    __4.3.4 공개 및 비공개 
    4.4 활용 
    __4.4.1 타이머 활용하기 
    __4.4.2 path/filepath 패키지 
    4.5 마치며 
    4.6 연습문제 


    CHAPTER 5 구조체 및 인터페이스
    5.1 구조체 
    __5.1.1 구조체 사용법 
    __5.1.2 const와 iota 
    __5.1.3 테이블 기반 테스트 
    __5.1.4 구조체 내장 
    5.2 직렬화와 역직렬화 
    __5.2.1 JSON 
    __5.2.2 Gob 
    5.3 인터페이스 
    __5.3.1 인터페이스의 정의 
    __5.3.2 커스텀 프린터 
    __5.3.3 정렬과 힙 
    __5.3.4 외부 의존성 줄이기 
    __5.3.5 빈 인터페이스와 형 단언 
    __5.3.6 인터페이스 변환 스위치 
    5.4 마치며 
    5.5 연습문제 


    CHAPTER 6 웹 애플리케이션 작성하기
    6.1 Hello, 세계! 
    6.2 할 일 목록 관리 웹 앱 만들기 
    __6.2.1 RESTful API 
    __6.2.2 Data Access Object 
    __6.2.3 RESTful API 핸들러 구현 
    __6.2.4 RESTful 서버 완성 
    __6.2.5 HTML 템플릿 작성하기 
    6.3 코드 리팩토링 
    __6.3.1 통일성 있게 파일 나누기 
    __6.3.2 라우터 사용하기 
    6.4 추가 주제 
    __6.4.1 HTTP 파일 서버 
    __6.4.2 몽고디비와 연동하기 
    6.5 마치며 
    6.6 연습문제 


    CHAPTER 7 동시성
    7.1 고루틴 
    __7.1.1 병렬성과 병행성 
    __7.1.2 고루틴 기다리기 
    7.2 채널 
    __7.2.1 일대일 단방향 채널 소통 
    __7.2.2 생성기 패턴 
    __7.2.3 버퍼 있는 채널 
    __7.2.4 닫힌 채널 
    7.3 동시성 패턴 
    __7.3.1 파이프라인 패턴 
    __7.3.2 채널 공유로 팬아웃하기 
    __7.3.3 팬인하기 
    __7.3.4 분산처리 
    __7.3.5 select 
    __7.3.6 파이프라인 중단하기 
    __7.3.7 컨텍스트(context.Context) 활용하기 
    __7.3.8 요청과 응답 짝 짓기 
    __7.3.9 동적으로 고루틴 이어붙이기 
    __7.3.10 주의점 
    7.4 경쟁 상태 
    __7.4.1 동시성 디버그 
    __7.4.2 atomic과 sync.WaitGroup 
    7.5 문맥 전환 
    7.6 마치며 
    7.7 연습문제 


    CHAPTER 8 실무 패턴
    8.1 오버로딩 
    __8.1.1 연산자 오버로딩 
    8.2 템플릿 및 제너릭 프로그래밍 
    __8.2.1 유닛 테스트 
    __8.2.2 컨테이너 알고리즘 
    __8.2.3 자료형 메타 데이터 
    __8.2.4 go generate 
    8.3 객체지향 
    __8.3.1 다형성 
    __8.3.2 인터페이스 
    __8.3.3 상속 
    __8.3.4 캡슐화 
    8.4 디자인 패턴 
    __8.4.1 반복자 패턴 
    __8.4.2 추상 팩토리 패턴 
    __8.4.3 비지터 패턴 
    8.5 마치며

  •  

    • #1

      갑자기 프로그래밍을 공부해야 하는 일이 생겼다. 그간 실제 코딩과는 거리가 있는 일을 해왔기에 요즘에는 어느 프로그래밍 언어가 대세인지 먼저 찾아보았다. C, C#, JAVA 등의 메이저 언어를 제외하고는 Javascript와 Python의 전성기로 보였다. Javascript는 문법에 대한 거부감이 있어서 Python으로 방향을 잡았었는데 우연히 듣게 된 IT 관련 팟캐스트에서 이 책 저자의 한 마디가 귀에 들어왔다. "제 경우에는 Go가 Python을 완전히 대체했어요."





      #2

      본인이 초보자임을 감안하더라도 이 책은 쉽지 않다. 다만 어려운만큼 더 도전의식을 불러 일으키는 책이다. , 마치 무림고수의 절대비급과 같은 향기를 풍긴다고 할까? 다른 프로그래밍 언어에 대해서 어느 정도 배경지식이 있는 개발자를 대상으로 Go언어의 차별성을 돋보이게 설명하는 서술 방식이 그렇다. 그래서 특별히 주의할 사항이 없는 기초적인 함수 등은 Go언어 공식 사이트의 레퍼런스 주소를 소개해주는 선에서 그친다. 저자 자신이 지금까지 갈고 닦은 노하우를 전수하는데 집중할 수 없게하는 잔가지는 모두 쳐버린 것이다. 그리고 다음 물음에 집중한다. [Go란 무엇이고 어떤 특징이 있는가?] [Go는 타 언어에 비교해서 어떤 장점을 갖고 있는가?] [어떻게 코딩하는 것이 가장 Go다운 방식인가?] [Go는 실무에서 어떻게 활용되는가?] 작가는 이런 물음-어쩌면 그간 작가 자신이 꾸준히 탐구해왔을 법한 질문-에 대해서 이 책 전체를 통해서 좋은 해답을 제시하고 있다.





      #3

      프로그래밍 언어를 설명하는 개발서에서 한 줄의 좋은 코드는 백 줄의 설명보다 더 설득력이 있다. 저자는 Go언어의 개발사인 Google에 재직하고 있으며 사내 Go언어 코드의 가독성 승인 권한을 비교적 초창기에 취득했다. 언어 가독성에 대한 권한 제도는 구글에서 해당 언어에 어느 정도 익숙하고 읽기 쉬운 코드를 작성할 수 있는 사람에게 주어지는 권한으로 이 권한이 없는 사람은 해당 언어로 코드를 작성한 뒤에 권한이 있는 사람에게 리뷰를 받고 승인을 받아야 코드를 체크인할 수 있는 제도이다. 저자는 다른 구글 엔지니어들의 Go 코드를 리뷰하면서 이미 다른 언어로 프로그래밍을 잘하는 사람들이 Go로 코드를 작성할 때 어떤 실수를 많이 하는지, 어떤 나쁜 습관이 있는지를 볼 수 있는 기회가 많이 있었고 그 노하우를 책에 충분히 담고 있다. 그래서 예제 코드 하나하나가 군더더기 없이 간결하고 프로그래머들이 실무에서 가장 선호하는 형태로 씌여졌다. 특히 책에 실린 대부분의 코드에 대한 테스트 코드가 삽입되어 코드 작성과 동시에 테스트를 수행할 수 있게 구성된 점은 무척 인상적이다.





      #4

      시원하면서도 포인트가 있는 표지 디자인과 휴대성을 고려한 적당한 크기, 부담없이 볼 수 있는 두께는 흠 잡을 데 없다. 다만 책이 아무리 중급자를 위해서 기획되었다고 해도, 좀더 친절할 수 있지 않았을까. 별도 윗첨자로 처리되지 않고 단순 기호(*)로 표기되어 코드 중간에 있을 때는 쉽게 구별이 가지 않는 주석도 그렇고 예제에 번호가 없는 부분도 아쉽다. 동 출판사의 베스트셀러인 HTML5 입문서처럼 모든 예제에 번호를 붙여주고 해당 예제의 파일을 정리하여 홈페이지에서 제공했으면 훨씬 좋았을 것이다. 학습자의 입장에서는 자잘한 내용 하나하나를 실행해보고 싶을 때 모두 직접 타이핑을 해봐야 하니 책 전체를 빠르게 흝어보기가 어렵다. 전체 내용을 빠르게 실행해본 후에 필요한 부분을 더 깊게 공부하는 타입인 본인에게는 여러가지로 번거롭다는 느낌이다.

    • 대상독자:



      이 책의 대상독자로는 쉽고 재미있게 Go언어의 핵심을 알고 싶은 개발자 혹은 개발 지식이 있는 분들입니다. Go언어를 다른 언어와 비교하는 것이 많이 언급이 되며, 전반적인 내용 설명이 독자가 기본 프로그래밍 지식을 알고 있다는 가정하에 전개되기 때문에 아예 "처음" 프로그래밍 입문용으로는 어려울 수 있다고 생각합니다.





      리뷰:



      개인적으로 한빛 IT 서적의 가장 큰 장점을 하나 꼽자면, 쉽고 자세한 설명이라 할 수 있겠습니다. 이 책에서도 그러한 장점이 고스란히 녹아있는 것을 볼 수 있어요. 쉽고 자세하면서 간결합니다.



      1장은 저자님께서 Go언어의 장점들을 짧지만 강력하게 추려놓으셨습니다.



      1장을 읽으면서 약간의 문화충격(?)을 좀 느꼈는데요. 여타 도서들의 1장은 소개 및 설치의 내용이 메인이기에 편안히 넘겨보는 편인데, 첫 장부터 냅다 실전으로 들어가자며 go놀이터(https://play.golang.org/)로 인도하신 것이 일단 그랬구요. 스마트폰에서도 컴파일러를 활용할 수 있다고 하니 장소와 장비에 큰 제약 없이 간단한 기능 구현 연습을 할 수 있겠구나 싶었네요. (실제 설치와 환경설정과 관련한 부분은 2장에 자세히 나옵니다. ) 이 외에도 책의 전개에 따라 제게 익숙하던 언어와는 다른 여러 문화충격을 선사하시며 Go언어의 문법, 유용하게 활용할 수 있는 부분들을 소개해 주십니다. Go언어 함수의 특성을 잘 활용한다면, 프로그래밍에 유연하게 적용할 수 있으며, 언어에 익숙해지면 가독성, 유연성 측면에서 아주 좋을 것 같다는 생각이 들었습니다.



      앞서 잠시 책이 (여타 프로그래밍 서적과 비교하여) 얇다고 언급하였습니다. 불필요한 내용은 제외한, 실제로 프로그래밍을 하다가 궁금해질 수 있는 부분에 대해 예제를 제시하기 때문입니다. 얇지만 문법활용부터 웹어플리케이션 작성과 네트워크 등 실무 패턴 등의 예제까지 살펴볼 수 있습니다. 양이 아닌 질로 승부를 하는 책이라는 생각이 들었습니다. Go언어 자체가 가볍고 강력한 언어라는 소문을 익히 들어와서인지 해당 책이 이러한 Go언어의 이미지를 아주 잘 표현하고 있다는 느낌이 듭니다.



      또한 이 책은 Go언어의 문법과 더불어 Go언어를 활용할 수 있는 여러 소스들에 관한 팁도 제공합니다. 예를 들면, github에서 소스코드를 불러와서 볼 수도 있고, 참고할 수 있는 가이드라인 및 자료에 대한 링크도 제시합니다. 타 튜토리얼 등에서 쉽게 접할 수 있는 문법에 관한 학습보다는 실제 활용 시 접할 수 있는 문제에 대한 예제들에 좀 더 초점을 맞추었고요. 각 단원마다 마무리 내용정리와 연습문제를 통해서 배운 내용을 복습하고, 더 심화하여 생각해볼 기회도 제공하기 때문에 책 한 권으로도 다양한 컨텐츠를 활용해 학습하실 수 있는 기회가 될 수 있었네요.



      직접 실행해볼 수 있는 예제들은 "소스코드 따라써보세요." 하는 기능 구현의 증명(?)의 예제라기보다는, 진행과정의 일부를 보여주고, "여기서 잠깐 생각해봅시다." 하고 해당 설명과 주의사항 등을 언급하며 한 단계 한 단계씩 진행해 나가는 방식이기에 기능이 가진 여러가지 역할을 살펴보며 진행할 수 있습니다. 여러 예제를 살펴보면서 다른 언어로는 구현하기가 까다로워 보이던 것도 Go언어로 표현하니 생각보다 간결하고 쉽게 되는 것이 참 신기하기도 했습니다.



      Go언어의 특성이 궁금하신 개발자분들, 혹은 입문을 원하시는 분들께는 아주 좋은 실용서임은 두말할 것이 없어보이지만, 프로그래밍 언어의 전반적인 기능을 살펴보시고자 하는 분들께도 좋은 책입니다.

    • https://brunch.co.kr/@daejin/10



      "Discovery Go"는 300페이지 정도의 무게가 가벼운 Go언어 책입니다. 가벼운 마음으로 책장을 넘기다 보면 어느새 1장이 끝났음을 알 수 있습니다. 하지만 유명한 하노이 탑이 다음장으로 넘어가는 것을 막고 있을지 모릅니다.



      "푸는 법이 떠오르지 않으면 건너뛰는 것을 추천한다."



      하노이 탑을 처음 보신 분들은 꼭 한 번은 도전해 보시길 바랍니다. 2장에서 갑자기 답이 불쑥 나오기 때문에 건너뛰게 되면 풀 기회를 잃어버리게 됩니다. 이 책은 보통 앞장 내용과 예제는 다음장으로 이어지므로 이해가 되지 않는 부분이 있다면 건너뛰지 말고 시간을 두고 충분히 이해하고 다음장으로 가시길 바랍니다.



      "3.2 배열과 슬라이스"



      연속된 메모리라는 말이 너무 자주 나오지만 7장 동시성과 같이 이 책에서 꼭 읽어야 되는 장으로 생각합니다. 동시성은 go언어에 특화된 부분이지만 배열과 슬라이스는 개발언어를 불문하고 모든 개발자들이 알아야 할 내용입니다.





      "어느 정도 프로그래밍 배경지식이 있어야 합니다."



      모든 것이 그렇듯 이 책도 아는 만큼만 보입니다. 함수형 프로그래밍, 인터페이스, 마살/언마살, 테스트 등등 경험이 있는 개발자가 Go에 대해 알 수 있도록 간결하게 작성되어있습니다.



      "개발자는 코드로 대화하기에..."



      동시성에 대한 배경지식이 부족했지만 7장 예제는 동시성과 Go의 매력을 동시에 느끼기에 충분했습니다. 다음에 기회가 된다면 고루틴과 채널로 개발하고 싶네요. 저도 그만 글 적고 코드를 짜야겠네요.



      -------------------------------------------

      본 리뷰는 한빛미디어에서 제공된 책으로 작성되었습니다.

  • 내용이 없습니다.
닫기

해당 상품을 장바구니에 담았습니다.
장바구니로 이동하시겠습니까?