0516-Go

hyejin·2022년 5월 17일
0

고랭

파이썬과 차이점
-> while 문이 없고, switch문이 있다.

chap. 01

Go 개발 환경 설정

scale up vs. scale out

  • scale up : 성능을 높이는 것
  • scale out : 장비를 추가해서 확장하는 방식

1.1 GO 도구 설치





  • 설치확인

1.2 GO 작업 공간

  • GOPATH 환경 변수
  • 작업 공간의 기본 디렉터리
    : GOPATH=$HOME/go
    GOPATH=%USERPROFILE%\go

cf.) 셸이란?

설치된 패키지 실행위치

  • %GOPATH%\bin
    %GOPATH%\src

1.3 go 명령어

  • go run go 파일... | go 패키지 (바로 실행)->임시 실행파일 생성
    -작은 프로그램 테스트
    -Go를 스크립트 언어처럼 사용 시
  • go build go 파일... | go 패키지 (실행파일 생성)->최종 배포본 생성
    -바이너리(실행파일) 생성
  • hello.go 파일생성
package main

import "fmt"

func main() {
    fmt.Println("Hello, world!")
}
  • go run hello.go 실행

  • go build hello.go 실행

  • go build hello.go
    go build -o hello_world.exe
    hello.go

  • 실행파일을 만드려면 main으로 만들어야함.
  • cmd에서 메모장 안켜질때

    -> 시스템 환경변수에 추가해야 함.

1.3.2 서드 파티 Go 도구 설치

  • go는 다른 언어와 달리 자신의 코드 저장소를 공유하여 패키지를 직접 다운받고 설치 가능
go install github.com/rakyll/hey@latest

hey https://www.golang.org

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 린팅, 베팅


(C와 비슷)

* Effective Go
-https://go.dev/doc/effective_go

* Go 위키의 코드 리뷰 규칙

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

1.5 개발 도구 소개

1.5.1 비주얼 스튜디오 코드

-설치

1.5.3 Go Playground

1.6 Makefiles

  • make 프로그램 필요

chap. 02

기본 데이터 타입과 선언

2.1 내장 타입

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 사용

  • 특수 정수 타입들
    -byte: unit8 보다 선호
    -int: 플랫폼에 따라서 int32, int64
    -uint: 플랫폼에 따라서 uint32, uint64
    -rune: int32지만 용도가 다르다
    -uintptr: 포인터

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

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

  • 복소수 타입

package main

import "fmt"

func main() {
	fmt.Println("hello world!")
	fmt.Println("Greetings and\n\"Salutations\"")
	fmt.Println(`Greetings and
"Salutations"`)

	var x = 10
	var y = 3
	fmt.Println(x / y)
	fmt.Println(x % y)
}

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 레벨에서 사용 불가

0개의 댓글