[TIL] Go 특강 Day-1

드림보이즈·2023년 5월 8일

분명 부트캠프는 끝이 났건만, 자꾸 뭐를 챙겨주신다. 이것이 부모님의 마음인가?

사실 go 언어를 배울 시간이 있지는 않다. 취업까지 배워봤자 찍먹일테고, 기존에 배웠던 언어를 고도화하고 복습하는게 더 나을 것 같기도 했다.

그러나 강사님이 너무 베테랑 전문가시고, 분명 16시간 강의를 통해 얻어가는게 있다고 생각해 이런 강의를 준비하셨을테니까, 또한 go를 처음 배우는 것도 아니고, 이것도 복습 겸 학습이지 않으리오?


Go 소개

장점

웹 서버 + 데모 서버 둘 다 만들 수 있음 (원래는 따로 따로 )

생산성 좋다, 빠르고 안정적

강력하고 미래 지향적인 언어

단점

우리나라에서 취급을 별로 안함, 진입단계

또한

최근 블록체인 코어 및 서비스 개발에 활발히 사용되고 있음, 간결하고 간단한 구문덕에 devops에서 도움이 되고 ci/cd 프로세스를 개선하고 가속화하기 위한 솔루션으로 자주 사용됨

라고 한다.

이 특강은 실습과 이해가 더 주요하기에 블로깅은 초간단하게, 복습하는 느낌으로 적겠다.


Go 시작하기

go env를 실행해

GOPATH

를 알아보고 해당 디렉토리에서

bin

pkg

src

폴더를 생성해야 한다.

go mod 설정

go에서는 라이브러리를 패키지로 관리하고, 외부 패키지 관리를 위한 모듈 관리 유틸리티를 제공하는 go mod를 사용

go mod init : 모듈 초기화 진행

go mod tidy : 초기화 후 패키지 설정 및 정렬, 외부 패키지 리스트 go.sum 생성

go run : 실행

go build -o ready <파일명> : 컴파일

go 특징

저장하면 자동으로 들여쓰기 가능, 세미 콜론 거의 안 쓰는 추세

대문자 : 전역 사용 가능 (public)

소문자 : 해당 파일 내에서만 사용 가능 (private)

패키지 특성

go package : go는 개발에 필요한 패키지를 표준 라이브러리로 제공, 이들은 GOROOT/pkg 안에 존재

표기법

MixCap 표기법을 사용 (internalFunction, helloWorld 이런 식, 언더바 지양)

세미콜론 for loop 에서만 구분할 때 사용, 아니면 쓰지마

null = nil

가변 인자 ...

함수 매개변수 개수가 정해져 있지 않으면 ...로 표현한다.

func sum(n ...int) int {
	total := 0
    for _, value = range n { // range로 가변인자의 모든 값 꺼냄
    	total += value
        }
        
        return total
    }
    
    func main() {
    	r := sum(1,2,3,4,5)
        fmt.println(r) // 15
   }

공백식별자 _

사용하지 않는 변수를 처리할 때 사용


표준 입출력

main 함수

모든 프로젝트의 시작 함수

fmt

기본 입출력 패키지

print : 값을 그대로 문자열로 만들시 사용, 붙여서 출력

println : 인자 간 사이 공백, 개행 문자(줄바꿈) 추가 출력

printf: 형식을 지정하여 출력, 문자열과 변수를 함께 출력시 사용

s := "name"
fmt.Printf("Hello %s", s).     

 //"Hello name"

sprint

변수를 핸드링한 이후에 메모리에 저장, 변수를 문자열로 만들거나 문자열에서 변수로 값을 가져올 때 사용


변수

네이밍 시 숫자 시작 지양

변수 네이밍시 공백 불가

대/소문자 구분

var

var i int

var j int = 10

var k = 10

l := 10

상수 const


함수

  • 함수 정의한 줄에서 중괄호 시작되어야만 한다!!!!!

다중 반환값

  • 코드가 간결해지고, 에러 핸들링에 용이
func divide(a,b int) (n int, err error) {
	if b === 0 {
    	return 0, errors.New("분모는 0이면 안됩니다")
        }
        return a / b , nil
    }
    
func main() {
	res, err := divide(4,2)
    if err != nil {
    	fmt.println("ERROR: ", err.Error())
        } else {
        	fmt.Println(res)
        }
    }

Defer - 지연 함수

  • 해당 함수를 나중에 실행
  • defer를 호출하는 함수가 반환되기 전에 즉각 함수 호출을 실행하도록 예약
  • 명시적 선언으로 메모리 해제에 대한 부담감을 해소 가능 - 함수 종료시 메모리 해제
profile
시리즈 클릭하셔서 카테고리 별로 편하게 보세용

0개의 댓글