Tucker의 Go 언어 프로그래밍 Ch3 ~ Ch11
이 글은 골든래빗 《 Tucker의 Go언어 프로그래밍 》의 3장~11장 써머리입니다.
Ch3 ~ Ch11
- Hello Go World
- 변수
- fmt 패키지를 이용한 텍스트 입출력
- 연산자
- 함수
- 상수
- if문
- switch문
- for문
# 코드 실행
폴더 생성
- 폴더 = 패키지
.go
파일 생성 및 작성Go 모듈 생성
1
go mod init <module name>
- go.mod 파일 생성
- 모듈명
- Go 버전
- 필요한 패키지 목록
- go.mod 파일 생성
빌드
1 2
# 운영체제와 아키텍처 지정해서 빌드 (default: 현재 시스템) GOOS=linux GOARCH=amd64 go build
- 실행 파일 생성 (Go 코드 -> 기계어)
실행
package main
main() 함수가 있는 패키지
- main() 함수: 프로그램이 시작과 끝점
# 주석
- 함수에 대한 주석
- 함수명을 써주고 그 뒤에 설명
- godoc 으로 문서 만들기
# 변수
값을 저장하는 메모리 공간을 가리키는 이름
# 변수 선언
|
|
# 변수명 규칙
- 첫 글자: 문자 or
_
_
를 제외한 특수문자는 불가- camelCase 권장
- 변수명은 되도록 짧게 권장 (잠시 사용되는 로컬 변수는 한 글자 권장)
# 타입별 기본값
- 정수: 0
- 실수: 0.0
- 불리언: false
- 문자열: ""
- 그 외: nil (정의되지 않은 메모리 주소를 나타냄)
별칭 타입
- byte = uint8
- rune = int32
# 타입 변환
|
|
- 큰 범위 -> 작은 범위: 값이 달라질 수 있음
# 숫자 표현
- 정수 표현
- 2의 보수: 모든 비트 반전 후 +1
- 실수 표현
- 부호 비트
- 지수부(8비트)
- 소수부(23비트)
# 텍스트 입출력
- fmt 패키지
- 표준 입출력 기능 제공
# 표준 출력
- Print(), Println(), Printf()
- 서식 문자
%v
: 데이터 타입에 맞춰 기본 형태로 출력%T
: 데이터 타입 출력%c
: 유니코드 문자를 출력%q
: 특수 문자 기능을 동작하지 않고 문자 그대로 출력%p
: 메모리 주솟값을 출력%5d
: 너비 지정 (5칸)%05d
: 0 채우기%-5d
: 왼쪽 정렬
# 표준 입력
|
|
- 표준 입력 스트림(메모리 공간)에 임시 저장
- 입력 실패 후 표준 입력 함수 호출시
- 스트림에 남아있는 값을 가져옴 (새로운 입력을 받지 않음)
- 입력 실패 후 표준 입력 함수 호출시
# 표준 입력 스트림 지우기
|
|
# 연산자
&^
(비트 클리어 연산자)- 특정 비트를 0 으로 바꿈 (^ 연산 후 & 연산 수행)
- 시프트 연산자
<<
: 오른쪽은 0으로 채워짐>>
: 왼쪽은 음수면 1, 양수면 0으로 채워짐
- 실수 오차
- 2진수 숫자 체계는 대부분 소수점 이하 숫자들을 표현하기 어려움
- 작은 오차를 무시
Nextafter(x, y float64)
: 가장 작은 오차(1비트)만큼 y를 향해 더하거나 빼줌
- 정밀도 조정
- math/big 패키지의 Float 객체 사용
- 대입 연산자
- 우변값을 좌변(메모리 공간)에 복사
- 아무런 값을 반환하지 않음
# 함수
|
|
인수는 매개변수로 복사된다
- 인수(argument): 함수 호출시 전달하는 값
- 매개변수(parameter): 함수가 사용하는 변수 (인수값을 복사)
- 멀티 반환 함수: 값을 여러 개 반환할 수 있음
- 변수명도 미리 지정 가능
# 상수
기본 타입값들만 상수로 선언될 수 있음
- 불리언, 룬, 정수, 실수, 복소수, 문자열
|
|
- 코드값으로 사용
- iota 키워드: 소괄호 안에서 0부터 1씩 증가
- 똑같은 규칙이 반복된다면 타입과 iota 생략 가능
- iota 키워드: 소괄호 안에서 0부터 1씩 증가
- 타입 없는 상수: 변수에 복사될 때 타입이 정해짐
- 컴파일될 때 리터럴로 변환
- 리터럴: 값 자체로 쓰인 문구
- 동적 할당 메모리 영역을 사용하지 않음
# if문
- 쇼트서킷
&&
: 좌변이 false 면 우변을 검사하지 않음||
: 좌변이 true 면 우변을 검사하지 않음
# switch문
|
|
fallthrough
키워드: 다음 case 문까지 실행
# for문
|
|