Go 마스터하기 (실습 예제와 함께 배우는 네트워크, 동시성, 테스트, gRPC 및 제네릭 | 3 판)

Go 마스터하기 (실습 예제와 함께 배우는 네트워크, 동시성, 테스트, gRPC 및 제네릭 | 3 판)

$49.12
Description
Go 언어에 관련한 지식을 좀 더 넓히고 싶은 중급 Go 프로그래머나 다른 프로그래밍 언어 경험이 있는 독자들을 대상으로 하는 책이다. Go 언어의 기본 개념부터 네트워크, 동시성, 테스트, gRPC, 제네릭 등의 주제들을 많은 실습 예제와 함께 소개한다. 3판에서는 2판에 비해 책의 두께를 줄였으며 더 자연스러운 흐름으로 재구성했다. 더 나은 Go 언어 개발자가 되고 싶다면 이 책이 도움을 줄 수 있을 것이다.
저자

미할리스추칼로스

MihalisTsoukalos
기술관련글쓰기를좋아하는유닉스시스템엔지니어다.『GoSystemsProgramming』(Packt,2017)과『Go마스터하기』(에이콘,2018),『Go마스터하기2/e』(에이콘,2021)의저자이기도하다.파트라스대학교(UniversityofPatras)에서수학학사학위를받았으며유니버시티칼리지런던(UniversityCollegeLondon)에서IT관련석사학위도받았다.지금까지「SysAdmin」,「MacTech」,「LinuxUserandDeveloper」,「Usenix;login:」,「LinuxFormat」,「LinuxJournal」등의여러저널에300여편이상의글을기고했다.주요관심분야는시계열,데이터베이스,인덱스다.
https://www.mtsoukalos.eu/와@mactsouk에서직접만나볼수있다.

목차

01장.Go의간략한소개
__Go소개
____Go의역사
____윈도우가아니라유닉스인이유
____Go의장점
____godoc과godoc유틸리티
__HelloWorld!
____함수소개
____패키지소개
__Go코드실행
____Go코드컴파일
____Go를스크립트언어처럼사용
____중요한형식과코딩규칙
__Go의중요한특성
____변수선언과사용
______변수출력
____프로그램흐름제어
____for루프와range로반복
____사용자입력받기
____표준입력읽기
______커맨드라인인수사용
____에러변수로입력타입구분
____Go의동시성모델이해
__Go로which(1)개발
__정보로깅
____log.Fatal()과log.Panic()
____커스텀로그파일작성
____로그항목에줄번호츨력
__제네릭개요
__기초적인전화번호부애플리케이션개발
__연습문제
__요약
__참고자료

02장.기본타입
__error타입
__숫자데이터타입
__숫자가아닌데이터타입
____문자열,문자,룬
______정수를문자열로변환
______unicode패키지
______strings패키지
____날짜와시간
______날짜와시간을파싱하는유틸리티
______타임존다루기
__Go상수
____상수생성기iota
__비슷한데이터모으기
____배열
____슬라이스
______슬라이스길이와용량
______슬라이스의일부분선택
______바이트슬라이스
______슬라이스에서원소삭제
______배열과슬라이스의관계
______copy()함수
______슬라이스정렬
__포인터
__난수생성
____랜덤한문자열생성
____안전한난수생성
__전화번호부애플리케이션업데이트
__연습문제
__요약
__참고자료

03장.합성데이터타입
__맵
____nil맵에저장
____맵반복
__구조체
____새구조체정의
____new키워드사용
____구조체의슬라이스
__정규표현식과패턴매칭
____Go정규표현식
____이름과성매칭
____정수매칭
____레코드의필드매칭
__전화번호부애플리케이션개선
____CSV파일다루기
____인덱스추가
____전화번호부애플리케이션의개선된버전
__연습문제
__요약
__참고자료

04장.리플렉션과인터페이스
__리플렉션
____Go구조체의내부
____리플렉션을이용해구조체값바꾸기
____리플렉션의세가지단점
__타입메서드
____타입메서드생성
____타입메서드사용
__인터페이스
____sort.Interface인터페이스
____빈인터페이스
____타입단언과타입스위치
____map[string]interface{}맵
____에러타입
____나만의인터페이스만들기
______Go인터페이스사용
______3차원형태데이터에서sort.Interface구현
__두가지CSV파일포맷다루기
__Go의객체지향프로그래밍
__전화번호부애플리케이션업데이트
____CSV파일값설정
____sort패키지사용
__연습문제
__요약
__참고자료

05장.패키지와함수
__Go패키지
____Go패키지다운로드
__함수
____익명함수
____여러값을반환하는함수
____함수의반환값에도이름을붙일수있다.
____함수를매개변수로받는함수
____함수를반환하는함수
____가변인수함수
____defer키워드
__Go패키지직접만들기
____init()함수
____실행순서
__깃허브에Go패키지저장
__데이터베이스를다루는Go패키지
____데이터베이스이해
____Go패키지저장
____Go패키지의설계
____Go패키지구현
____Go패키지테스트
__모듈
__Go패키지를잘만드는방법
__문서화
__깃랩러너
____초기설정파일
____최종설정파일
__깃허브액션
____깃허브에시크릿저장
____최종설정파일
__버전부여
__연습문제
__요약
__참고자료

06장.유닉스시스템에게작업지시
__stdin,stdout,stderr
__유닉스프로세스
__유닉스시그널처리
____두가지시그널처리
__파일입출력
____io.Reader와io.Writer인터페이스
____io.Reader와io.Writer의사용과오용
____버퍼를이용한파일입출력과버퍼를이용하지않는파일입출력
__텍스트파일읽기
____줄단위로텍스트파일읽기
____단어단위로텍스트파일읽기
____문자단위로텍스트파일읽기
____/dev/random읽기
____파일에서원하는만큼만데이터읽기
__파일쓰기
__JSON데이터다루기
____Marshal()과Unmarshal()
____구조체와JSON
____스트림형태로JSON데이터읽고쓰기
____JSON레코드출력다듬기
__XML다루기
____JSON과XML변환
__YAML다루기
__viper패키지
____커맨드라인플래그사용
____JSON설정파일읽기
__cobra패키지
____세개의커맨드가있는유틸리티
____커맨드라인플래그추가
____커맨드앨리어스생성
____하위커맨드생성
__유닉스파일시스템에서순환참조찾기
__Go1.16의새로운기능
____파일임베딩
____ReadDir과DirEntry
____io/fs패키지
__전화번호부애플리케이션업데이트
____cobra사용
____JSON데이터저장하고읽기
____delete커맨드구현
____insert커맨드구현
____list커맨드구현
____search커맨드구현
__연습문제
__요약
__참고자료


07장.Go의동시성
__프로세스,스레드,고루틴
__Go스케줄러
____GOMAXPROCS환경변수
____동시성과병렬성
__고루틴
____고루틴생성
____고루틴여러개생성
____고루틴이끝날때까지기다리기
____Add()와Done()의호출횟수가일치하지않는경우
____고루틴으로여러파일생성
__채널
____채널에데이터쓰고읽기
____닫힌채널에서데이터받기
____함수매개변수로지정한채널
__경쟁상태
____Go경쟁상태감지기
__select키워드
__고루틴타임아웃
____main()내부에서고루틴타임아웃
____main()바깥에서고루틴타임아웃
__Go채널다시보기
____버퍼채널
____nil채널
____워커풀
____시그널채널
______고루틴의실행순서지정
__공유메모리와공유변수
____sync.Mutex타입
______뮤텍스를해제하는것을잊어버렸을경우
____sync.RWMutex타입
____atomic패키지
____고루틴으로메모리공유
__클로저변수와go구문
__context패키지
____context를키/값저장소로사용
__semaphore패키지
__연습문제
__요약
__참고자료

08장.웹서비스만들기
__net/http패키지
____http.Response타입
____http.Request타입
____http.Transport타입
__웹서버생성
__전화번호부애플리케이션업데이트
____API정의
____핸들러구현
__프로메테우스로메트릭노출
____runtime/metrics패키지
____메트릭노출
______Go서버의도커이미지생성
______메트릭노출
____메트릭읽기
____프로메테우스에메트릭넣기
____그라파나에서프로메테우스메트릭시각화
__웹클라이언트개발
____http.NewRequest()를사용해클라이언트개선
____전화번호부서비스의클라이언트만들기
__파일서버만들기
____전화번호부애플리케이션에서다운로드하기
__HTTP연결타임아웃설정
____SetDeadline()사용
____클라이언트에서타임아웃설정
____서버에서타임아웃설정
__연습문제
__요약
__참고자료

09장.TCP/IP와웹소켓
__TCP/IP
____nc(1)커맨드라인유틸리티
__net패키지
__TCP클라이언트개발
____net.Dial()을이용한TCP클라이언트개발
____net.DialTCP()를이용해TCP클라이언트개발
__TCP서버개발
____net.Listen()을이용한TCP서버개발
____net.ListenTCP()를사용한TCP서버개발
__UDP클라이언트개발
__UDP서버개발
__동시성있는TCP서버개발
__유닉스도메인소켓
____유닉스도메인소켓서버
____유닉스도메인소켓클라이언트
__웹소켓서버개발
____서버구현
______websocat사용
______자바스크립트사용
__웹소켓클라이언트개발
__연습문제
__요약
__참고자료

10장.RESTAPI
__REST소개
__RESTful서버및클라이언트개발
____RESTful서버
____RESTful클라이언트
__실제로작동하는RESTful서버개발
____RESTAPI
____gorilla/mux
____서브라우터사용
____데이터베이스사용
____restdb테스트
____RESTful서버구현
____RESTful서버테스트
______GET핸들러테스트
______POS

출판사 서평

◈이책에서다루는내용◈

◆실전에서의Go활용방법
◆안정적이고동시성을지원하는고성능코드
◆슬라이스,배열,맵,포인터등의데이터구조
◆리플렉션과인터페이스를활용한재사용가능한패키지개발
◆효과적인Go프로그래밍을위한제네릭활용
◆동시성있는RESTful서버및gRPC클라이언트와서버개발
◆JSON데이터를이용하는Go구조체정의

◈이책의대상독자◈

Go에관련한지식을좀더넓히고싶은중급Go프로그래머를대상으로한다.다른프로그래밍언어에대한경험이있는상태에서Go를배우고싶은개발자도기초를볼필요없이곧바로Go를익힐수있을것이다.

◈이책의구성◈

1장,‘Go의간략한소개’에서는Go의역사와Go의중요한특징및장점부터소개한다.Godoc과godoc유틸리티를소개하고,Go프로그램을컴파일하고실행하는방법을설명한다.그런다음엔결과를출력하는방법과사용자입력을받는방법,커맨드라인인수를다루는방법,로그파일의사용법을다룬다.마지막으로전화번호부애플리케이션의기본버전을개발해보고이후장에서이를발전시켜나간다.
2장,‘기본타입’에서는Go의기본타입들을알아보고같은데이터타입들을모아사용할수있는배열과슬라이스도알아본다.Go의포인터,상수,날짜및시간을다루는방법도알아보고마지막에서는난수를생성해전화번호부애플리케이션의데이터를무작위데이터로채워본다.
3장,‘합성데이터타입’에서는맵,구조체,struct키워드를살펴본다.또한정규표현식과패턴매칭,CSV파일도다룬다.마지막으로전화번호부애플리케이션의데이터가영속적으로저장되게만든다.
4장,‘리플렉션과인터페이스’에서는리플렉션,인터페이스,데이터타입에대한함수인타입메서드를다룬다.또한sort.Interface인터페이스를사용해슬라이스를정렬하는방법,빈슬라이스,타입단언,타입스위치,error데이터타입등을다룬다.그리고Go에서객체지향개념을흉내내는방법을살펴보고전화번호부애플리케이션도개선한다.
5장,‘패키지와함수’에서는패키지의주요한원소인패키지,모듈,함수를다룬다.PostgreSQL데이터베이스와상호작용하는패키지를개발하고문서화한다.또한defer키워드를설명하고깃랩러너와깃허브액션을통한자동화및Go바이너리의도커이미지생성도알아본다.
6장,‘유닉스시스템’에게작업지시에서는시스템프로그래밍을살펴본다.다루는주제는커맨드라인인수받기,유닉스시그널처리,파일입출력,io.Reader와io.Writer인터페이스,viper와cobra패키지등이포함돼있다.또한JSON,XML,YAML파일을다루는방법,유닉스파일시스템에서순환참조를찾는방법,Go바이너리에파일임베딩,os.ReadDir()함수,os.DirEntry타입,io/fs패키지등을살펴본다.마지막으로cobra패키지로전화번호부애플리케이션을적절한커맨드라인유틸리티로변환하고JSON데이터를사용하게개선한다.
7장,‘Go의동시성’에서는고루틴,채널,파이프라인을다룬다.프로세스,스레드,고루틴의차이점을살펴보고,sync패키지및Go스케줄러의동작방식도알아본다.또한select키워드와여러종류의Go채널,공유메모리,뮤텍스,sync.Mutex타입,sync.RWMutex타입도알아본다.그리고context패키지와semaphore패키지,워커풀,고루틴타임아웃,경쟁상태감지등도소개한다.
8장,‘웹서비스만들기’에서는net/http패키지,웹서버및웹서비스개발,프로메테우스로메트릭노출,그라파나로메트릭시각화,웹클라이언트및파일서버개발등을실습한다.또한전화번호부애플리케이션을웹서비스로변환하고이를위한커맨드라인클라이언트도생성한다.
9장,‘TCP/IP와웹소켓’에서는net패키지,TCP/IP,TCP와UDP프로토콜,유닉스소켓,웹소켓프로토콜을다룬다.또한많은종류의네트워크서버와클라이언트를개발한다.
10장,‘RESTAPI’에서는RESTAPI와RESTful서비스를다룬다.RESTAPI를정의해보고동시성을지원하는RESTful서버및RESTful서비스의클라이언트로동작하는커맨드라인유틸리티를개발한다.마지막으로RESTAPI의문서화를위한스웨거를소개하고바이너리파일을업로드및다운로드하는방법도알아본다.
11장,‘코드테스팅과프로파일링’에서는코드테스팅,코드최적화,코드프로파일링,크로스컴파일,Go코드벤치마킹,예제함수만들기,go:generate의사용법,도달할수없는Go코드를찾는법등을다룬다.
12장,‘gRPC’에서는Go에서gRPC를다룬다.또한gRPC서비스의메서드와메시지를정의하는방법을살펴보고이를Go코드로어떻게변환하는지알아본다음gRPC서비스의서버및클라이언트를개발한다.
13장,‘제네릭’에서는제네릭과제네릭함수를작성하기위한문법,제네릭데이터타입을정의하는방법을알아본다.
부록A,‘Go가비지컬렉터’에서는Go가비지컬렉터의동작과가비지컬렉터가코드의성능에끼치는영향을살펴본다.