이 저장소는 골든래빗에서 출간한 책인 [Tucker의 Go 언어 프로그래밍]에 포함된 예제 코드를 제공합니다. 이 책을 위해 동영상 강의를 제공합니다. 제 개인 유튜브 채널인 Tucker Programming에서 볼 수 있습니다.
- 교보 : https://bit.ly/3sQXbDv
- 예스24 : https://bit.ly/3rXrRSh
- 알라딘 : https://bit.ly/3rONLar
-
01장 컴퓨터 원리
- 1.1 비트의 탄생과 트랜지스터
- 1.2 트랜지스터에서 계산기로
- 1.3 계산기에서 컴퓨터로
- 1.4 컴퓨터 동작 원리
- 핵심 요약
- 연습문제
-
02장 프로그래밍 언어
- 2.1 초창기 프로그래밍 언어
- 2.2 어셈블리어의 등장
- 2.3 고수준 언어의 등장
- 2.4 프로그래밍 언어의 구분
- 핵심 요약
- 연습문제
-
03장 Hello Go World
- 3.1 Go 역사
- 3.2 Go 언어 특징
- 3.3 코드가 실행되기까지
- 3.4 Hello Go World 코드 뜯어보기
- 핵심 요약
- 연습문제
-
04장 변수
- 4.1 변수란?
- 4.2 변수 선언
- 4.3 변수에 대해 더 알아보기
- 4.4 변수 선언의 다른 형태
- 4.5 타입 변환
- 4.6 변수의 범위
- 4.7 숫자 표현
- 핵심 요약
- 연습문제
-
05장 fmt 패키지를 이용한 텍스트 입출력
- 5.1 표준 입출력
- 5.2 표준 입력
- 5.3 〈깊이보기〉 키보드 입력과 Scan() 함수의 동작 원리
- 핵심 요약
- 연습문제
-
06장 연산자
- 6.1 산술 연산자
- 6.2 비교 연산자
- 6.3 〈깊이보기〉 실수 오차
- 6.4 논리 연산자
- 6.5 대입 연산자
- 6.6 연산자 우선순위
- 핵심 요약
- 연습문제
-
07장 함수
- 7.1 함수 정의
- 7.2 함수를 호출하면 생기는 일
- 7.3 함수는 왜 쓰나?
- 7.4 재귀 호출
- 핵심 요약
- 연습문제
-
08장 상수
- 8.1 상수 선언
- 8.2 상수는 언제 사용하나?
- 8.3 타입 없는 상수
- 8.4 상수와 리터럴
- 핵심 요약
- 연습문제
-
09장 if문
- 9.1 if문 기본 사용법
- 9.2 그리고 &&, 또는 ||
- 9.3 중첩 if
- 9.4 if 초기문; 조건문
- 핵심 요약
- 연습문제
-
10장 switch문
- 10.1 switch문 동작 원리
- 10.2 switch문을 언제 쓰는가?
- 10.3 다양한 switch문 형태
- 10.4 const 열거값과 switch
- 10.5 break와 fallthrough 키워드
- 핵심 요약
- 연습문제
-
11장 for문
- 11.1 for문 동작 원리
- 11.2 continue와 break
- 11.3 중첩 for문
- 11.4 중첩 for문과 break, 레이블
- 핵심 요약
- 연습문제
-
12장 배열
- 12.1 배열
- 12.2 배열 사용법
- 12.3 배열은 연속된 메모리
- 12.4 다중 배열
- 핵심 요약
- 연습문제
-
13장 구조체
- 13.1 선언 및 기본 사용
- 13.2 구조체 변수 초기화
- 13.3 구조체를 포함하는 구조체
- 13.4 구조체 크기
- 13.5 프로그래밍에서 구조체의 역할
- 핵심 요약
- 연습문제
-
14장 포인터
- 14.1 포인터란?
- 14.2 포인터는 왜 쓰나?
- 14.3 인스턴스
- 14.4 〈깊이보기〉 스택 메모리와 힙 메모리
- 핵심 요약
- 연습문제
-
15장 문자열
- 15.1 문자열
- 15.2 문자열 순회
- 15.3 문자열 합치기
- 15.4 〈깊이보기〉 문자열 구조
- 15.5 〈깊이보기〉 문자열은 불변이다
- 핵심 요약
- 연습문제
-
16장 패키지
- 16.1 패키지
- 16.2 패키지 사용하기
- 16.3 Go 모듈
- 16.4 패키지명과 패키지 외부 공개
- 16.5 〈깊이보기〉 패키지 초기화
- 핵심 요약
- 연습문제
-
17장 〈Project〉 숫자 맞추기 게임 만들기
- 17.1 해법
- 17.2 사전지식
- 17.3 STEP 1 : 랜덤한 숫자 생성하기
- 17.4 STEP 2 : 숫자값 입력받기
- 17.5 STEP 3 : 숫자 맞추기 완성하기
- 핵심 요약
- 연습문제
-
18장 슬라이스
- 18.1 슬라이스
- 18.2 〈깊이보기〉 슬라이스 동작 원리
- 18.3 슬라이싱
- 18.4 유용한 슬라이싱 기능 활용
- 18.5 슬라이스 정렬
- 핵심 요약
- 연습문제
-
19장 메서드
- 19.1 메서드 선언
- 19.2 메서드는 왜 필요한가?
- 19.3 포인터 메서드 vs 값 타입 메서드
- 핵심 요약
- 연습문제
-
20장 인터페이스
- 20.1 인터페이스
- 20.2 인터페이스 왜 쓰나?
- 20.3 〈깊이보기〉 덕 타이핑
- 20.4 인터페이스 기능 더 알기
- 20.5 인터페이스 변환하기
- 핵심 요약
- 연습문제
-
21장 함수 고급편
- 21.1 가변 인수 함수
- 21.2 defer 지연 실행
- 21.3 함수 타입 변수
- 21.4 함수 리터럴
- 핵심 요약
- 연습문제
-
22장 자료구조
- 22.1 리스트
- 22.2 링
- 22.3 맵
- 22.4 〈깊이보기〉 맵의 원리
- 핵심 요약
- 연습문제
-
23장 에러 핸들링
- 23.1 에러 반환
- 23.2 〈깊이보기〉 에러 타입
- 23.3 패닉
- 핵심 요약
- 연습문제
-
24장 고루틴과 동시성 프로그래밍
- 24.1 스레드란?
- 24.2 고루틴 사용
- 24.3 〈깊이보기〉 고루틴의 동작 방법
- 24.4 동시성 프로그래밍 주의점
- 24.5 뮤텍스를 이용한 동시성 문제 해결
- 24.6 뮤텍스와 데드락
- 24.7 또 다른 자원 관리 기법
- 핵심 요약
- 연습문제
-
25장 채널과 컨텍스트
- 25.1 채널 사용하기
- 25.2 컨텍스트 사용하기
- 핵심 요약
- 연습문제
-
26장 〈Project〉 단어 검색 프로그램 만들기
- 26.1 해법
- 26.2 사전 지식
- 26.3 STEP 1 : 실행 인수 읽고 파일 목록 가져오기
- 26.4 STEP 2 : 파일을 열어서 라인 읽기
- 26.5 STEP 3 : 파일 검색 프로그램 완성하기
- 26.6 개선하기
- 핵심 요약
- 연습문제
-
27장 객체지향 설계 원칙 SOLID
- 27.1 객체지향 설계 5가지 원칙 SOLID
- 27.2 단일 책임 원칙
- 27.3 개방-폐쇄 원칙
- 27.4 리스코프 치환 원칙
- 27.5 인터페이스 분리 원칙
- 27.6 의존 관계 역전 원칙
- 27.7 학습 마무리
- 핵심 요약
- 연습문제
-
28장 테스트와 벤치마크
- 28.1 테스트 코드
- 28.2 〈깊이보기〉 테스트 주도 개발
- 28.3 벤치마크
- 핵심 요약
- 연습문제
-
29장 Go 언어로 만드는 웹 서버
- 29.1 HTTP 웹 서버 만들기
- 29.2 〈깊이보기〉 HTTP 동작 원리
- 29.3 HTTP 쿼리 인수 사용하기
- 29.4 ServeMux 인스턴스 이용하기
- 29.5 파일 서버
- 29.6 웹 서버 테스트 코드 만들기
- 29.7 JSON 데이터 전송
- 29.8 HTTPS 웹 서버 만들기
- 핵심 요약
- 연습문제
-
30장 〈Project〉 RESTful API 서버 만들기
- 30.1 해법
- 30.2 사전 지식 : RESTful API
- 30.3 STEP 1 : RESTful API 서버 만들기
- 30.4 STEP 2 : 테스트 코드 작성하기
- 30.5 STEP 3 : 특정 학생 데이터 반환하기
- 30.6 STEP 4 : 학생 데이터 추가/삭제하기
- 핵심 요약
- 연습문제
-
31장 〈Project〉 Todo 리스트웹 사이트 만들기
- 31.1 해법
- 31.2 준비하기
- 31.3 STEP 1 : 웹 서버 만들기
- 31.4 STEP 2 : 프론트엔드 만들기
- 31.5 웹 배포 방법 고려하기
- 31.6 STEP 3 : 헤로쿠로 배포하기
- 핵심 요약
- 연습문제
-
A Go 문법 보충 수업
- A.1 배열과 슬라이스
- A.2 for range
- A.3 입출력 처리
- A.4 알아두면 유용한 go 명령어
- A.5 cgo로 C 언어 호출하기
- A.6 go doc
- A.7 Embed
-
B 생각하는 프로그래밍
- B.1 Go는 객체지향 언어인가?
- B.2 구조체에 생성자를 둘 수 있나?
- B.3 포인터를 사용해도 복사가 일어나나?
- B.4 값 타입을 쓸 것인가? 포인터를 쓸 것인가?
- B.5 구체화된 객체와 관계하라고?
- B.6 Go 언어 가비지 컬렉터
-권경모(구글 소프트웨어 엔지니어, 한글 번역 프로젝트 기여자) - “Go 언어 입문자에게 추천할 수 있는 우리나라 책을 알게 되어 기분이 좋습니다. 'A Tour of Go'보다 더 많은 예시를 보고 싶은 현 Go 언어 개발자께도 추천합니다.”
-
김호광(베타랩스 대표이사)
- “Go 언어의 매력은 간결함입니다. 이 책은 초보자에게 Go 언어의 매력을 알려줍니다. 한 달 동안몰입하여 타이핑하고 숙독한다면 프로그래머가 된 자신을 만나게 될 겁니다.”
-
방현우(Urbanbase CTO)
- “Go 언어의 가능성을 맛볼 수 있는 지침서입니다. 고루틴, 채널 등 동시성 프로그래밍에 대한 개념뿐 아니라 RESTful API와 같은 보편적 개발 지식도 습득할 수 있습니다.”
-
강대명(위버스컴퍼니 소프트웨어 엔지니어)
- “이보다 쉽고 재미있을 수 없습니다. 아주 쉽지만, Go 언어에 대한 궁금함을 세세하게 잡아주는 책!”
-
김재훈(한양대학교 ERICA캠퍼스 학부생)
- “‘Go 언어 문법’만이 아닌, ‘Go 언어로 개발하는 방법’을 알려줍니다. 문법만 언급하고 끝나는 책이 아니기에, 다소 어렵게 느껴지기도 하지만, 저자의 안내에 따라 하나씩 정복하다 보면 어느새 Go 언어에 친근감을 느끼게 될 겁니다. 기본기를 탄탄히 쌓고 싶은 분께 추천합니다.”
-
★ Must Have 시리즈 안내
- Must Have 시리즈는 내 것으로 만드는 시간을 드립니다. 명확한 학습 목표와 핵심 정리를 제공하고, 간단명료한 설명과 다양한 그림으로 학습 효과를 극대화합니다. 설명과 예제를 제공해 응용력을 키워줍니다. 할 수 있습니다. 포기는 없습니다. 지금 당장 밑 줄 긋고 메모하고 타이핑하세요! Must Have가 여러분의 성장을 돕겠습니다.
-
★ 32만 뷰가 증명하는 GO 언어 명강사를 만나자
- Go 언어 1등 유튜버 Tucker가 더 체계적으로 Go 언어를 알려줍니다. 문법만 알려드리는 데 그치지 않습니다. Go 프로그래밍 능력을 길러드리는 것이 목표입니다. Go 언어에 입문해, 커뮤니티와 구글링으로 현업 문제를 해쳐나갈 수 있는 문턱까지 안내해드립니다. 포기하지 않고 예제 하나하나를 타이핑해가며 공부하면 반드시 목표를 달성할 수 있게 구성했습니다.
-
숫자로 보는 책의 특징
-
0 단계 컴퓨터 원리부터 확실히
- Go 프로그래밍 입문에 앞서 컴퓨터 동작 원리와 프로그래밍을 알아봅니다. 배경지식을 짧고 굵게 보여주어 프로그래밍에 대한 호기심을 자극하는 촉매가 되어줄 겁니다.
-
1.16 Go 언어 최신 버전
- 2021년 2월 1.16 버전을 발표했습니다. 가장 중요한 변화는 Go 모듈 사용이 기본이라는 점입니다(16.3절). 다른 하나는 embed 기능입니다(Tucker 노트 A.7절).
-
3 단계로 익히는 Go 언어
- 1단계에서 Go 기본 문법을 익히고, 2단계에서는 고급 기능을 익힙니다. 3단계에서는 유용한 기법과 더 나은 프로그래밍을 위한 길을 제시하고 현업에서 바로 활용할 수 있는 웹 서버를 만들어봅니다.
-
-
4가지 난이도 프로젝트 구현
- 입문 수준의 프로젝트부터 완성된 웹 서비스까지 프로젝트를 제공합니다.
- ★☆☆☆ 숫자 맞추기 게임 만들기
- ★★☆☆ 단어 검색 프로그램 만들기
- ★★★☆ RESTful API 서버 만들기
- ★★★★ Todo 리스트 웹 서비스 만들기
- 입문 수준의 프로젝트부터 완성된 웹 서비스까지 프로젝트를 제공합니다.
-
86개 연습문제
- 각 장마다 연습문제를 제공해 놓치기 쉬운 핵심을 되짚어보고 직접 프로그래밍을 해볼 수 있게 했습니다. 직접 만들어보는 횟수만큼 실력이 늘어납니다. 모든 연습문제를 풀어, 이 책을 100% 활용하세요.
-
200여 개 예제 제공
- 200개가 넘는 예제를 활용해 설명합니다. 책에 등장하는 예제를 하나씩 따라 할 때마다 프로그래밍 실력이 차곡차곡 쌓이도록 충실히, 때로는 그림을 활용해서 설명했습니다.
-
다른 언어를 배운 적이 있는 프로그래밍 초보자께
- 눈만으로는 무엇도 얻을 수 없습니다. 시간이 걸리더라도 반드시 직접 타이핑해가면서 책을 읽어주세요. 저자의 유튜브 Go 언어 강의도 활용하시면 도움이 될 겁니다. 너무 어렵다면 〈깊이 보기〉는 스킵해도 좋습니다.
-
다른 언어를 사용하는 현업 프로그래머께
- 모던 언어로서 Go 언어는 다양한 프로그래밍 기법과 개념을 지녔습니다. 다른 언어의 문법을 배웠다고 해서 Go 언어에서 제공하는 모든 개념을 다 알 수는 없습니다. 같지만 다른 듯 사용하는 개념과 기법도 적지 않습니다. 기존에 익혔던 언어와 비교해가면서 읽어보세요. 예제 코드를 먼저 분석해 이해가 안 될 때만 상세 설명을 참조하면 빠르게 책을 읽을 수 있을 겁니다.
-
현업에서 Go 언어를 사용하는 프로그래머께
- 입문자 눈높이에 맞혀 쉬운 언어로 차근차근 설명해, 너무 쉽고 속도감이 떨어진다고 느낄 수 있습니다. 쉬운 말로 설명했다고 해서 쉬운 내용만 담지는 않았습니다. SOLID 원칙을 적용하고, REST API를 만들고 백엔드 서버를 만드는 등 현업에 유용한 깊이 있는 기술들도 다루니, 이미 아는 내용은 건너뛰면서 끝까지 읽어주세요
-
Q. 해외에서 Go 언어 인기가 어느 정도인지요?
- A. 해외뿐 아니라 국내에서도 Go 언어 인기는 날로 증가하고 있습니다. Go 언어는 그 심플함과 강력한 성능으로 소위 개발자가 즐거워지는 언어라고 이야기를 합니다. 〈Stack Overflow Developer Survey 2020〉에 따르면 Go 언어는 사랑받는 언어 랭킹이 1년만에 10위에서 5위로 크게 상승했습니다. 배우고 싶은 언어 3위에 올랐습니다. 미국에서 연봉이 높은 언어 3위입니다.
-
Q. Go 언어, 열심히 활용하는 기업이나 프로젝트를 알려주세요.
- A. 아무래도 Go 언어를 만든 구글에서 가장 활발히 사용합니다. 대표적으로 구글에서 만든 마이크로서비스 오케스트레이션 시스템인 쿠버네티스가 있습니다. 구글 외 프로젝트에서는 컨테이너 시스템인 도커와 분산 DB 시스템인 코크로치DB(CockroachDB)를 들 수 있습니다. 특히 드롭박스는 많은 버그와 성능상 문제를 해결하려고 기존 파이썬에서 Go 언어로 전면 교체를 했습니다. 그외 넷플릭스 등 많은 대형 IT 기업에서 Go 언어를 사용합니다. 손쉽게 마이크로서비스를 만들 수 있어서 마이크로서비스 시스템을 사용하는 스타트업에서 인기가 높습니다.
-
Q. Go 언어는 어디에 유용한가요?
- A. Go 언어는 범용 프로그래밍 언어로서 모든 분야의 프로젝트에 사용됩니다. 특히 시스템 프로그래밍과 백엔드 프로그래밍에 많이 사용됩니다. Go 언어는 쉽고 예외 상황이 적은 문법과 빠른 성능을 제공합니다. 2009년에 발표된 이후 10년 넘게 일관되고 쉬운 문법이라는 기조를 유지해왔습니다. 이런 특징 덕분에 빠른 개발이 필요한 스타트업과 높은 성능이 필요한 시스템 프로그래밍에서 Go 언어 사용이 늘고 있습니다. 암호화폐, 웹 서버, DB, 백엔드 시스템 등에서 활발히 사용됩니다.
-
Q. 마지막으로 독자께 깨알 책 자랑 부탁드립니다.
- A. 중학생 때 처음 프로그래밍을 접했습니다. C 언어를 독학하던 그 시절 ‘고수에게 멘토링을 받았다면 지금 내 모습은 어떻게 달라졌을까’하는 생각이 드네요. 중학생이던 나와 같은 처지에 있는 분께 올바르고 따뜻한 길을 제시하고 싶습니다. 물론 지금은 유튜브나 인터넷에 수많은 정보가 있지만, 짤막하게 단절된 정보이기 때문에 체계적인 학습을 제공하는 책도 필요하니까요. 입문서이지만 입문서로 끝나지 않고 프로그래머로 나아가는 길을 제시하려는 집필 의도가 독자께 무사히 전달되길 기원합니다.
이 책은 0~3단계까지, 배경지식부터 Go 프로그래밍에 유용한 기법까지 다룹니다. 추가로 본문에서 다하지 못한 이야기는 〈Tucker 노트〉에서 더 깊고 자세히 다룹니다.
-
0단계 Go 언어를 배우기 전에 기초 원리를 잘 알아야 더 깊은 이해를 할 수 있습니다. 본격적으로 Go 프로그래밍 언어를 배우기 앞서 개발 환경을 구축합니다. 그후 프로그래밍 입문자와 초보자를 고려해 컴퓨터란 무엇이고, 어떻게 동작하는지 또 프로그래밍이란 무엇인지, 현대적 프로그래밍 언어가 탄생하게 된 배경은 무엇이고, Go 언어는 어떤 특징을 가지는지 살펴봅니다. 컴퓨터, 프로그램, 프로그래밍 언어의 관계를 더 잘 이해하고 더 좋은 코드를 만드는 발판이 되길 바랍니다.
-
1단계 가볍게 Go 입문하기 Go 언어 기본 문법을 차근차근 배웁니다. 변수, 연산자, 제어문, 함수 등 대부분 언어가 제공하는 기본 문법입니다. Go 언어의 기본 문법과 프로그래밍 방식을 알려드립니다.
-
2단계 고급 기법으로 Go 레벨업하기 Go 언어 고급 문법을 알아봅시다. 메서드, 인터페이스, 다양한 함수 활용 방법을 살펴봅니다. 상황에 맞게 자료구조를 선택하는 방법과 예외 상황에 대처하는 방법도 배웁니다. 고루틴, 채널, 컨텍스트를 활용한 Go 언어만의 독특한 동시성 프로그래밍도 배우게 됩니다. 마지막 장에서는 ★ 두 개 수준 프로젝트로 파일에서 원하는 단어를 찾는 프로그램을 만들어보겠습니다.
-
3단계 Go 프로그래밍에 유용한 기법 익히기 3단계는 어엿한 Go 언어 프로그래머로 첫발을 내딛을 수 있도록 돕는 데 목적이 있습니다. Go 언어 문법은 이미 다 배웠습니다. 문법만 익혀서는 좋은 프로그램을 만들 수 없습니다. 문법을 넘어서 Go 프로그래머로 성장해야 합니다. SOLID 객체지향 설계 원칙, 테스트, 벤치마크 방법을 익히며 좋은 프로그램을 만드는 프로그래머로 성장해봅시다. 이대로 끝나면 아쉽겠죠? 지금까지 배운 것을 바탕으로 29장에서는 웹 서버를 만듭니다. 그리고 ‘RESTful API 서버’, ‘Todo 리스트 웹 사이트 만들기’ 프로젝트를 함께 진행해보고 마무리합니다.
-
Tucker 노트 본문에서 미처 다루지 못한 Go 문법, 생각하는 프로그래밍, Go 언어를 Go답게 쓰는 방법을 알려드립니다. 저자 Tucker의 특별한 노트를 만나보세요. A. Go 문법 보충 수업 B. 생각하는 프로그래밍