상세정보
미리보기
Go 마스터하기 3/e
- 저자
- 미할리스 추칼로스 저/허성연 역
- 출판사
- 에이콘출판사
- 출판일
- 2022-12-01
- 등록일
- 2023-07-11
- 파일포맷
- PDF
- 파일크기
- 36MB
- 공급사
- YES24
- 지원기기
-
PC
PHONE
TABLET
웹뷰어
프로그램 수동설치
뷰어프로그램 설치 안내
책소개
Go 언어에 관련한 지식을 좀 더 넓히고 싶은 중급 Go 프로그래머나 다른 프로그래밍 언어 경험이 있는 독자들을 대상으로 하는 책이다. Go 언어의 기본 개념부터 네트워크, 동시성, 테스트, gRPC, 제네릭 등의 주제들을 많은 실습 예제와 함께 소개한다. 3판에서는 2판에 비해 책의 두께를 줄였으며 더 자연스러운 흐름으로 재구성했다. 더 나은 Go 언어 개발자가 되고 싶다면 이 책이 도움을 줄 수 있을 것이다.
저자소개
기술 관련 글쓰기를 좋아하는 유닉스 시스템 엔지니어다. 『Go Systems Programming』(Packt, 2017)과 『Go 마스터하기』(에이콘, 2018), 『Go 마스터하기 2/e』(에이콘, 2021)의 저자이기도 하다. 파트라스대학교(University of Patras)에서 수학 학사 학위를 받았으며 유니버시티 칼리지 런던(University College London)에서 IT 관련 석사 학위도 받았다. 지금까지 「Sys Admin」, 「MacTech」, 「Linux User and Developer」, 「Usenix;login:」, 「Linux Format」, 「Linux Journal」 등의 여러 저널에 300여 편 이상의 글을 기고했다. 주요 관심 분야는 시계열, 데이터베이스, 인덱스다. https://www.mtsoukalos.eu/와 @mactsouk에서 직접 만나볼 수 있다.
목차
01장. Go의 간략한 소개__Go 소개____Go의 역사____윈도우가 아니라 유닉스인 이유____Go의 장점____go doc과 godoc 유틸리티__Hello World!____함수 소개____패키지 소개__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 패키지____세 개의 커맨드가 있는 유틸리티____커맨드라인 플래그 추가____커맨드 앨리어스 생성____하위 커맨드 생성__유닉스 파일 시스템에서 순환 참조 찾기__Go 1.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장. REST API__REST 소개__RESTful 서버 및 클라이언트 개발____RESTful 서버____RESTful 클라이언트__실제로 작동하는 RESTful 서버 개발____REST API____gorilla/mux____서브라우터 사용____데이터베이스 사용____restdb 테스트____RESTful 서버 구현____RESTful 서버 테스트______GET 핸들러 테스트______POST 핸들러 테스트______PUT 핸들러 테스트______DELETE 핸들러 테스트__RESTful 클라이언트____커맨드라인 클라이언트 구조 갖추기____RESTful 클라이언트 커맨드 구현____RESTful 클라이언트 사용____여러 REST API 버전 사용__바이너리 파일 업로드와 다운로드__REST API 문서화를 위한 스웨거____REST API 문서화____문서 파일 생성____문서 파일 제공__연습문제__요약__참고 자료11장. 코드 테스팅과 프로파일링__코드 최적화__코드 벤치마킹____더 나은 테스트를 위한 main() 함수 재작성____쓰기 및 읽기 버퍼 벤치마킹____benchstat 유틸리티____잘못 작성한 벤치마크 함수__코드 프로파일링____커맨드라인 애플리케이션 프로파일링____HTTP 서버 프로파일링____Go 프로파일러의 웹 인터페이스__go tool trace 유틸리티____클라이언트에서 웹 서버 추적____웹 서버의 모든 경로 방문__Go 코드 테스트____./ch03/intRE.go 테스트 작성____TempDir() 함수____CleanUp() 함수____testing/quick 패키지____테스트 타임아웃____코드 커버리지 테스트____도달할 수 없는 코드 찾기__데이터베이스 백엔드를 갖춘 HTTP 서버 테스트__퍼즈 테스트__크로스컴파일__go:generate__예제 함수 생성__연습문제__요약__참고 자료12장. gRPCgRPC 소개____프로토콜 버퍼__인터페이스 정의 언어 파일 작성__gRPC 서버 개발__gRPC 클라이언트 개발____클라이언트를 이용한 gRPC 서버 테스트__연습문제__요약__참고 자료13장. 제네릭__제네릭 소개__제약 조건____제약 조건 만들기__제네릭을 이용한 데이터 타입 정의____Go 구조체에서의 제네릭 사용__인터페이스와 제네릭__리플렉션과 제네릭__연습 문제__요약__참고 자료부록A. Go 가비지 컬렉터__힙과 스택__가비지 컬렉션____삼색 알고리듬____Go 가비지 컬렉터의 상세한 동작 방식____맵, 슬라이스와 Go 가비지 컬렉터______슬라이스 사용______맵에 포인터 사용______포인터를 사용하지 않는 맵 사용______맵 나누기____예제 성능 비교__참고 자료