5.16

w0nyyy·2022년 5월 17일
1

Go lang

chap. 01

scale up vs scale out
: 시스템 구성하는 요소가 증가하는 것을 말함

1.1 GO 도구 설치

https://go.dev/

1.2 GO 작업 공간

* GOPATH 환경 변수

* 작업 공간의 기본 디렉터리
: GOPATH=$HOME/GO
GOPATH=%USERPROFILE%\go

cf.) 셸이란 ?

  • https://jhnyang.tistory.com/57
    커널과 사용자간의 다리역할을 하는 것.
    사용자로부터 명령을 받아 그것을 해석하고 프로그램을 실행해줌

* %GOPATH%\bin
* %GOPATH%\src

1.3 GO 명령어

* go run go 파일....|go 패키지

  • 작은 프로그램 테스트
  • GO를 스크립트 언어처럼 사용 시

* go build go 파일...|go 패키지

  • 바이너리(실행파일) 생성

  • go build hello.go

  • go build -o hello_world.exe // 윈도우만 실행파일 확장자 구분함

1.3.2 서드 파티 go 도구 설치

*go는 다른 언어와 달리 자신의 코드 저장소를 공유하여 패키지를 직접 다운받고 설치가능

* 예) go install github.com/rakyll/hey@latest

1.3.3 코드 포매팅

  • 효율적인 코드 작성을 위함

* go fmt

  • 들여쓰기 공백 수정
  • 구조체 항목 정렬
  • 연산자 주변 적절한 공백 사용 체크

* goimports

  • import 문 정리
    • 알파벳 순 정렬
    • 사용되지 않은 import 삭제
    • import 추측(추론): 100% 정확하지 않음
  • enhanced go fmt
  • go install 명령으로 설치 필요 (p.28 참조)

* 세미콜론 삽입 규칙

  • go fmt는 이 규칙에 의해 잘못 삽입된 중괄호({})는 수정 못함
  • Go 컴파일러가 자동으로 문장 끝에 세미콜론을 붙여줌
  • 규칙
    • 식별자
    • 기본 리터럴
    • 다음 토큰 중 하나: break, continue, fallthrough, return, ++, ‘--’, }, )

1.4 린팅, 베팅

* Effective Go

* Go 위키의 코드 리뷰 규칙

* linter

  • 1978년 시작
  • 코드가 스타일 가이드를 잘 지켰는지 확인
  • 알맞은 변수 이름 지정
  • ...
  • 100% 정확도 아님
  • 설치(p.31)

1.5 개발 도구 소개

1.5.1 비주얼 스튜디오 코드

* Go 개발을 위한 VS Code 구성

1.5.3 Go Playground

1.6 Makefiles 텍스트 파일

* make 프로그램 필요


chap. 02

2.1 내장 타입

* https://go101.org/article/basic-types-and-value-literals.html

1) 불리언
2) 숫자

  • 정수: 주로 int 사용, 경우에 따라 byte
  • 실수
  • 복소수
    3) 문자열
    4) 별칭: byte(uint8), rune(int32)

2.1.1 제로 값

* 선언되었으나 값이 할당되지 않은 변수에 기본 값 제로(0) 할당

2.1.2 리터럴

* 코드에 작성하는 값 그 자체

* 정수 리터럴

  • 10진수, 8진수, 16진수, 2진수 ⇒ 접두사 이용 (없음, 0o, 0x, 0b)
  • 밑줄(underscore): 정수 리터럴 사이에

* 부동 소수점 리터럴

  • 점(.)
  • e(E) 지수 표현
  • 밑줄 가능

* 룬 리터럴

  • 작은 따옴표
  • 단일 유니코드 문자, 8비트 8진 숫자, 8비트 16진수 숫자, 16비트 16진수 숫자, 32비트 유니코드
  • 이스케이프 시퀀스: ‘\n’, ‘\t’, ...

* 문자 리터럴

  • 두 가지 방법
  • 1) 해석된 문자열 리터럴: 큰 따옴표 사용
    • 이스케이프 룬이 처리가 됨
  • 2) 로(raw) 문자열: 역따옴표(백틱) 사용

* 다른 타입으로 선언된 두 정수는 연산 불가능

  • 하지만, 부동소수점 변수에 정수 리터럴 사용 가능
    정수 변수에 부동소수점 리터럴 사용 가능
  • 왜냐, 리터럴 자체에는 데이터 타입이 없으므로

* Go 언어는 실용적 언어 => 리터럴에는 타입이 정해져 있지 않다

2.1.3 불리언

* true, false

2.1.4 숫자 타입

* 정수 타입

  • 특수한 경우 아니면 int 사용
  • int가 기본 타입

* 특수 정수 타입들

  • byte: uint8 보다 선호
  • int: 플랫폼에 따라서 int32, int64
  • uint: 플랫폼에 따라서 uint32, uint64
  • rune: int32지만 용도가 다르다
  • uintptr: 포인터

* 정수 연산자

  • 산술연산자의 결과는 정수
  • 복합대입연산자도 지원
  • 비교연산자
  • 비트연산자
  • 시프트연산자
  • 논리연산자

* 부동소수 타입

  • float32, float64(기본 타입)
  • %(나머지 연산)에 대해서는 정의되어 있지 않음
  • 부동소수 변수끼리 ==, != 비교는 가능하나 사용하지 말자

* 복소수 타입

2.1.5 문자열과 룬 맛보기

* 문자열

  • 제로 값: 비어있는 문자열
  • 비교연산자 가능
  • 연결연산자(+)
  • 불변(immutable)
  • 큰 따옴표

* 룬

  • 단일 코드 포인트
  • 작은 따옴표
  • int32의 별칭

2.1.6 명시적 타입 변환

cf.) Explicit vs. Implicit
명시적 vs. 암시적(암묵적)
⇒ Manual vs. Automatic

* 자동 타입 변환

  • 편리하나
  • 변환 규칙이 복잡, 예기치 못한 결과 초래 가능

* Go는 자동 타입 변환 불허

  • 의도의 명확성 및 가독성 중시 때문
  • 명시적으로 타입 변환해야 함
    -> 모든 타입 변환 규칙을 외울 필요 없음

* 다른 Go 타입을 불리언으로 취급할 수 없다.

  • 조건식은 반드시 비교식으로 작성

2.2 var vs. :=

* 변수 선언 스타일에 따른 의도가 존재

* var 키워드
[SYNTAX]
var 변수 타입 = 값(표현식)

  • 값의 타입이 예상가능하면 타입 생략 가능
  • 값을 생략하면 타입의 제로 값이 대입
  • 같은 타입의 여러 변수 또는 다른 타입의 여러 변수 동시 선언 가능
  • 여러 변수의 제로 값 동시 선언 가능

* 다양한 변수를 한 번에 선언

  • 선언리스트를 괄호로 묶어서

* := 짧은 선언

  • var 키워드(X)
  • 타입(X)
  • 함수 밖에서는 사용 불가 = package 레벨에서 사용 불가

2.3 const 사용

  • 상수: 상수 변수
  • 한 번 대입한 값을 변경할 수 없다
  • 컴파일 시 값이 결정되어야 한다, 즉 변수를 대입할 수 없다.
  • 리터럴에 이름을 부여하는 방법

2.4 타입 지정 상수와 타입 미지정 상수

  • 프로그래밍 의도
  • 타입 미지정 상수는 리터럴과 같은 취급

0개의 댓글