golang gin과 firestore 연동하기 왜 두개를 연결하게 되었나요 클론 프로젝트를 진행하게 되면서 백단은 golang을 이용한 gin으로 restful을 활용하기로 정했는데, 역시 여러명이 하는거다보니 db를 무엇으로할지 고민이 되었다 rdbms는 익숙하니까 nosql로 해볼까 여러명이 쉽게 공유할수있는 db없나 결론 : google에서 지원하는 firebase의 firestore사용해보자! firestore DB firebas... golangginfirestorefirestore set container There is no built-in set container in Go How to implement Set struct{} => type struct{}{} => 0bytes How to create set := Set{} or set := make(Set) Environment reference... golanggolang [Go] Error 처리는 어떻게 해야할까? 나쁜 방식 1: sentinel error(파수꾼 에러) 원문의 필자는 이 sentinel(파수꾼)이라는 단어를 error 와 조합하여, sentinel error라는 표현을 사용하였다. io.EOF, syscall 패키지에서 사용하는 syscall.ENOENT 같은 low level 의 error 들이 sentinel error에 속한다고 한다. sentinel errors로 error를 ... errorgolangerror Golang 기초 (13) : 슬라이스에 대하여 슬라이스 변수의 요소 타입을 int로 선언하려면 위와 같이 []int로 타입을 지정하면 됩니다. 📍 슬라이스 안의 슬라이스 위와 같이 슬라이스를 이중으로 사용할 수도 있습니다. 📍 슬라이스 인덱스 별 지정하여 선언 위와 같이 인덱스를 지정하여 선언할 수 있습니다. 📍 append() append()를 사용했을 때, 기존 슬라이스의 공간이 부족하면 두 배 크기의 공간을 할당해서 완전히 새로운 ... gogolang입문기초go [Go] _test.go는 import 할 수 없다. (error (no required module provides package)) 요즘 TDD를 실천하면서 test코드를 열심히 작성하고 있다. 그런데 test코드 사이에서 코드의 중복이 발생하는 경우가 종종 발생하였다. 이를 태면, 사용자를 생성하는 api는 더미 사용자 데이터 생성 사용자 생성 api 호출 와 같이 테스트 할 수 있고, 컨텐스 생성 api는 더미 사용자 테이터 생성 사용자 생성 더미 컨텐츠 데이터 생성 컨텐츠 데이터 생성 api 호출 와 같이 테스트 한... golangtesterrorerror 유니코드 문자 단위 처리 Go언어 소스코드는 UTF-8로 되어있다. (UTF-8 인코딩은 유니코드를 이진수로 저장하는 규칙들 중 하나이다) 위 코드를 출력해보면 가 나온다. 위 for문을 이옹하여 조사 적용을 매끄럽게하는 코드를 보면 이제 이 함수의 테스트를 만들어보면 원하는파일이름_test.go로 파일을 만들고 메인함수로 쓸만한 내용에 이름을 func Example원하는함수이름() 으로 만들어야한다. 그리고 테스트... golanggolang [Go, Python] gRPC 맛보기 gRPC란 구글에서 개발한 RPC(remote procedure call) 시스템이다. gRPC는 데이터 전송을 위해서 HTTP/2를 사용하고, IDL(interface description language)로 Protocal Buffer를 사용한다. RPC 는 request–response protocol로 동작한다. 원래 프로그램은 다른 주소공간으로 reqeust를 보내고, 이 요청을 받... golanggrpcpythonExampleExample Single Responsibility Principle in GO ☝ Single Responsibility "In any well-designed system, objects should only have a single responsibility." by Robert Martine. 잘 설계 된 모든 시스템에서 객체들은 오로지 1개의 책임만을 가지고 있어야 한다. 즉, 객체를 구현하는 코드는 오로지 한가지 일만을 효율적인 방법으로 처리하는데 집중해야 한... go소프트웨어엔지니어링SOLID 디자인 원칙SRPSOLIDgolangSOLID Go - Goroutine 정리 따라서 Golang 기반의 서버에서는 요청 1건 당 1개의 고루틴을 생성 하도록 만들 수 있지만, 요청 1건 당 1개의 쓰레드를 할당하는 다른 언어 기반의 서버는 앞선 방식으로 쓰이게 되면 결국에는 OOM(OutOfMemory) 이슈의 원인이 될 것이다. 그래서 OS레벨의 쓰레드를 직접 Call하여 쓰레드를 생성/소거하는 언어들은 이 문제를 풀어내기 위해서 쓰레드 Pool을 활용하여 이러한 ... golanggoroutinegolang Go를 활용해 AWS Cloud Watch에 나만의 커스텀 Metric 넣어보기 cloudwatch에 나만의 커스텀 Metric을 넣어보려고 합니다. Aws SDK를 보던 중 Metric을 보내는 방법이 있어서 이를 테스트 하게 되었고 제가 간단하게 만든 데이터가 CloudWatch에서 만드는 데이터와 동일하다는 것을 볼 수 있었습니다. 어떻게 제가 만들었는지에 대해서 설명드리겠습니다. Cloud Watch agent 내부 간단하게 파해쳐보기 AWS Cloud Watch... golangawscloudwatchgoaws Golang 알아두면 좋은 함수 - copy() programmers 문제를 풀다가 이런 식으로 변수를 만들었더니 v 값을 바꿨는데 array 값도 함께 바뀐다. 코드에선 바뀔 부분이 없는데 왜 바뀌는 지 모르겠어서 찾아보니 단순히 새로운 변수에 슬라이스 값을 대입하면 메모리를 참조하고 있는 포인터까지 복사해오기 때문에 모두가 값이 바뀐다. 그래서 새로운 슬라이스를 생성해서 copy() 함수로 슬라이스를 복사해야 한다. 처럼 사용한다.... golang알아두면 좋은 함수golang [golang] os.Args Go언어를 처음 배우면서 만난 os패키지 중 Args 검색을 해보면 커맨드라인 인자 (Command-line arguments)으로 프로그램 의 실행을 매개변수화 하는 일반적인 방법이라고 한다. 진짜 처음에는 무슨 소리인지 하나도 몰랐다. 다른 미니 프로젝트를 해보다가 여유가 생길때 다시 공부를 해보려 하니까 이해가 되었다 os.Args[1:]은 인자를 갖는다 os.Args[0]은 경로이다 ... golanggogo Golang 기초 (12) : 패키지 & 모듈 & 워크스페이스에 대하여 📍 package main main 패키지를 선언할 수 있고, main() 함수를 작성할 수 있습니다. main 패키지 외에는 main() 함수를 가질 수 없습니다. import를 하고 나면 그 패키지가 제공하는 것들(함수, 구조체 등)을 사용할 수 있습니다. '-'를 포함한 import를 하면, 패키지를 사용할 때 '-'를 빼고 사용할 수 있습니다. import한 패키지명이 길고 복잡하거나... golang기초입문gogo 1. Go로 순수 함수형 프로그래밍하기 어떤 함수형 프로그래밍 타입이 업무 요구 사항에 가장 잘 부합하는지 결정하기. Go는 여러 플랫폼에서 실행 가능하며 병행 프로그래밍, 많은 개발 지원도구 및 커뮤니티를 제공한다 => "단순하며 강력한 언어" 함수형 프로그래밍 스타일은 간결하고, 높은 표현력, 줄여지는 코드량, 낮은 오류발생률을 제공한다. 동일한 입력 값으로 동일한 함수를 실행해도 실행할 때마다 다른 결과를 얻을 수 있다. 참... golang함수형 프로그래밍golang 2. 컬렉션 다루기 Itertools의 컬렉션 처리 함수 맛보기 하나의 명령 실행 결과(함수형 프로그래밍)가 파이프를 통해 다음 명령으로 전달되는 형태(파이핑)와 비슷. ➡ 데이터의 컬렉션을 함수 또는 함수 호출 체인의 입력으로 주고 변환된 결과를 얻는 방식에서 많이 사용함 함수를 전달 인자로 취하고 함수를 반환하는 함수를 고계 함수 라고 한다. 암묵적 프로그래밍은 다른 함수와 함수 컴피네이터를 조합해 함수를 ... golang함수형 프로그래밍golang Go 프로그래밍 - 슬라이스 크기 정보를 가지고 있는 배열 포인터이다. 1. 초기화 방법 크기가 정의되어있지 않은 배열로 선언하는 방법 {}를 이용한 초기화 방법 make()를 이용한 초기화 2. 슬라이스 요소 접근 3. 요소 추가 append()를 이용 4. 슬라이싱 배열의 일부를 집어내는 기능 슬라이싱으로 배열 일부를 가리키는 슬라이스 만들기 그렇다면 len과 cap은 어떻게 될까? len = endIdx - sta... 슬라이스golanggogo [Go] #3. Go 의 Log 사용 log import import 에 "log" 추가 기본 사용 Default, Fatal, Print 등의 선택지가 있다. 자세한건 go 공식사이트 참조 확인 파일로 쓸 수는 없나? 콘솔 확인 로그 파일 확인 찍먹 후기 파일을 쓰는 작업인데 엄청 빠른 느낌이다. 간단한 echo 서버 구성시나 검색 서버로 쓰면 괜찮을 것 같다. 연구가 많이 필요하다... 하...... golangloggogo [백준] Golang 입력값 받는 방법 fmt 패키지(Scan, Print)를 사용하는 방법도 있지만 속도가 매우 느려서 시간을 초과하는 경우가 많다. bufio패키지에서도 입출력에 관여하는 Reader와 Writer 함수를 제공한다. bufio 활용하는 것이 속도 측면에서 좋다.... golanggolang [Golang] [백준/10430] 나머지 ModulogoeasyalgorithmgolangbaekjoonModulo Go 2. 기본 문법2 또한 다른 프로그래밍 언어(C, Java, JavaScript 등)에서 사용하는 반복문과 비슷한 형식으로도 반복문을 만들 수 있다. 다만 특기할만한 점으로, if 조건 안에서 변수를 생성해 그 변수와 조건을 비교할 수 있다는 특징이 있다. 포인터는 어떤 변수가 있을 때 그 변수의 값이 아닌 메모리 주소를 가리키는 것을 뜻하며, 한 변수를 다른 변수에 복사할 때 반드시 이해하고 있어야 하는 개... golanggolang
gin과 firestore 연동하기 왜 두개를 연결하게 되었나요 클론 프로젝트를 진행하게 되면서 백단은 golang을 이용한 gin으로 restful을 활용하기로 정했는데, 역시 여러명이 하는거다보니 db를 무엇으로할지 고민이 되었다 rdbms는 익숙하니까 nosql로 해볼까 여러명이 쉽게 공유할수있는 db없나 결론 : google에서 지원하는 firebase의 firestore사용해보자! firestore DB firebas... golangginfirestorefirestore set container There is no built-in set container in Go How to implement Set struct{} => type struct{}{} => 0bytes How to create set := Set{} or set := make(Set) Environment reference... golanggolang [Go] Error 처리는 어떻게 해야할까? 나쁜 방식 1: sentinel error(파수꾼 에러) 원문의 필자는 이 sentinel(파수꾼)이라는 단어를 error 와 조합하여, sentinel error라는 표현을 사용하였다. io.EOF, syscall 패키지에서 사용하는 syscall.ENOENT 같은 low level 의 error 들이 sentinel error에 속한다고 한다. sentinel errors로 error를 ... errorgolangerror Golang 기초 (13) : 슬라이스에 대하여 슬라이스 변수의 요소 타입을 int로 선언하려면 위와 같이 []int로 타입을 지정하면 됩니다. 📍 슬라이스 안의 슬라이스 위와 같이 슬라이스를 이중으로 사용할 수도 있습니다. 📍 슬라이스 인덱스 별 지정하여 선언 위와 같이 인덱스를 지정하여 선언할 수 있습니다. 📍 append() append()를 사용했을 때, 기존 슬라이스의 공간이 부족하면 두 배 크기의 공간을 할당해서 완전히 새로운 ... gogolang입문기초go [Go] _test.go는 import 할 수 없다. (error (no required module provides package)) 요즘 TDD를 실천하면서 test코드를 열심히 작성하고 있다. 그런데 test코드 사이에서 코드의 중복이 발생하는 경우가 종종 발생하였다. 이를 태면, 사용자를 생성하는 api는 더미 사용자 데이터 생성 사용자 생성 api 호출 와 같이 테스트 할 수 있고, 컨텐스 생성 api는 더미 사용자 테이터 생성 사용자 생성 더미 컨텐츠 데이터 생성 컨텐츠 데이터 생성 api 호출 와 같이 테스트 한... golangtesterrorerror 유니코드 문자 단위 처리 Go언어 소스코드는 UTF-8로 되어있다. (UTF-8 인코딩은 유니코드를 이진수로 저장하는 규칙들 중 하나이다) 위 코드를 출력해보면 가 나온다. 위 for문을 이옹하여 조사 적용을 매끄럽게하는 코드를 보면 이제 이 함수의 테스트를 만들어보면 원하는파일이름_test.go로 파일을 만들고 메인함수로 쓸만한 내용에 이름을 func Example원하는함수이름() 으로 만들어야한다. 그리고 테스트... golanggolang [Go, Python] gRPC 맛보기 gRPC란 구글에서 개발한 RPC(remote procedure call) 시스템이다. gRPC는 데이터 전송을 위해서 HTTP/2를 사용하고, IDL(interface description language)로 Protocal Buffer를 사용한다. RPC 는 request–response protocol로 동작한다. 원래 프로그램은 다른 주소공간으로 reqeust를 보내고, 이 요청을 받... golanggrpcpythonExampleExample Single Responsibility Principle in GO ☝ Single Responsibility "In any well-designed system, objects should only have a single responsibility." by Robert Martine. 잘 설계 된 모든 시스템에서 객체들은 오로지 1개의 책임만을 가지고 있어야 한다. 즉, 객체를 구현하는 코드는 오로지 한가지 일만을 효율적인 방법으로 처리하는데 집중해야 한... go소프트웨어엔지니어링SOLID 디자인 원칙SRPSOLIDgolangSOLID Go - Goroutine 정리 따라서 Golang 기반의 서버에서는 요청 1건 당 1개의 고루틴을 생성 하도록 만들 수 있지만, 요청 1건 당 1개의 쓰레드를 할당하는 다른 언어 기반의 서버는 앞선 방식으로 쓰이게 되면 결국에는 OOM(OutOfMemory) 이슈의 원인이 될 것이다. 그래서 OS레벨의 쓰레드를 직접 Call하여 쓰레드를 생성/소거하는 언어들은 이 문제를 풀어내기 위해서 쓰레드 Pool을 활용하여 이러한 ... golanggoroutinegolang Go를 활용해 AWS Cloud Watch에 나만의 커스텀 Metric 넣어보기 cloudwatch에 나만의 커스텀 Metric을 넣어보려고 합니다. Aws SDK를 보던 중 Metric을 보내는 방법이 있어서 이를 테스트 하게 되었고 제가 간단하게 만든 데이터가 CloudWatch에서 만드는 데이터와 동일하다는 것을 볼 수 있었습니다. 어떻게 제가 만들었는지에 대해서 설명드리겠습니다. Cloud Watch agent 내부 간단하게 파해쳐보기 AWS Cloud Watch... golangawscloudwatchgoaws Golang 알아두면 좋은 함수 - copy() programmers 문제를 풀다가 이런 식으로 변수를 만들었더니 v 값을 바꿨는데 array 값도 함께 바뀐다. 코드에선 바뀔 부분이 없는데 왜 바뀌는 지 모르겠어서 찾아보니 단순히 새로운 변수에 슬라이스 값을 대입하면 메모리를 참조하고 있는 포인터까지 복사해오기 때문에 모두가 값이 바뀐다. 그래서 새로운 슬라이스를 생성해서 copy() 함수로 슬라이스를 복사해야 한다. 처럼 사용한다.... golang알아두면 좋은 함수golang [golang] os.Args Go언어를 처음 배우면서 만난 os패키지 중 Args 검색을 해보면 커맨드라인 인자 (Command-line arguments)으로 프로그램 의 실행을 매개변수화 하는 일반적인 방법이라고 한다. 진짜 처음에는 무슨 소리인지 하나도 몰랐다. 다른 미니 프로젝트를 해보다가 여유가 생길때 다시 공부를 해보려 하니까 이해가 되었다 os.Args[1:]은 인자를 갖는다 os.Args[0]은 경로이다 ... golanggogo Golang 기초 (12) : 패키지 & 모듈 & 워크스페이스에 대하여 📍 package main main 패키지를 선언할 수 있고, main() 함수를 작성할 수 있습니다. main 패키지 외에는 main() 함수를 가질 수 없습니다. import를 하고 나면 그 패키지가 제공하는 것들(함수, 구조체 등)을 사용할 수 있습니다. '-'를 포함한 import를 하면, 패키지를 사용할 때 '-'를 빼고 사용할 수 있습니다. import한 패키지명이 길고 복잡하거나... golang기초입문gogo 1. Go로 순수 함수형 프로그래밍하기 어떤 함수형 프로그래밍 타입이 업무 요구 사항에 가장 잘 부합하는지 결정하기. Go는 여러 플랫폼에서 실행 가능하며 병행 프로그래밍, 많은 개발 지원도구 및 커뮤니티를 제공한다 => "단순하며 강력한 언어" 함수형 프로그래밍 스타일은 간결하고, 높은 표현력, 줄여지는 코드량, 낮은 오류발생률을 제공한다. 동일한 입력 값으로 동일한 함수를 실행해도 실행할 때마다 다른 결과를 얻을 수 있다. 참... golang함수형 프로그래밍golang 2. 컬렉션 다루기 Itertools의 컬렉션 처리 함수 맛보기 하나의 명령 실행 결과(함수형 프로그래밍)가 파이프를 통해 다음 명령으로 전달되는 형태(파이핑)와 비슷. ➡ 데이터의 컬렉션을 함수 또는 함수 호출 체인의 입력으로 주고 변환된 결과를 얻는 방식에서 많이 사용함 함수를 전달 인자로 취하고 함수를 반환하는 함수를 고계 함수 라고 한다. 암묵적 프로그래밍은 다른 함수와 함수 컴피네이터를 조합해 함수를 ... golang함수형 프로그래밍golang Go 프로그래밍 - 슬라이스 크기 정보를 가지고 있는 배열 포인터이다. 1. 초기화 방법 크기가 정의되어있지 않은 배열로 선언하는 방법 {}를 이용한 초기화 방법 make()를 이용한 초기화 2. 슬라이스 요소 접근 3. 요소 추가 append()를 이용 4. 슬라이싱 배열의 일부를 집어내는 기능 슬라이싱으로 배열 일부를 가리키는 슬라이스 만들기 그렇다면 len과 cap은 어떻게 될까? len = endIdx - sta... 슬라이스golanggogo [Go] #3. Go 의 Log 사용 log import import 에 "log" 추가 기본 사용 Default, Fatal, Print 등의 선택지가 있다. 자세한건 go 공식사이트 참조 확인 파일로 쓸 수는 없나? 콘솔 확인 로그 파일 확인 찍먹 후기 파일을 쓰는 작업인데 엄청 빠른 느낌이다. 간단한 echo 서버 구성시나 검색 서버로 쓰면 괜찮을 것 같다. 연구가 많이 필요하다... 하...... golangloggogo [백준] Golang 입력값 받는 방법 fmt 패키지(Scan, Print)를 사용하는 방법도 있지만 속도가 매우 느려서 시간을 초과하는 경우가 많다. bufio패키지에서도 입출력에 관여하는 Reader와 Writer 함수를 제공한다. bufio 활용하는 것이 속도 측면에서 좋다.... golanggolang [Golang] [백준/10430] 나머지 ModulogoeasyalgorithmgolangbaekjoonModulo Go 2. 기본 문법2 또한 다른 프로그래밍 언어(C, Java, JavaScript 등)에서 사용하는 반복문과 비슷한 형식으로도 반복문을 만들 수 있다. 다만 특기할만한 점으로, if 조건 안에서 변수를 생성해 그 변수와 조건을 비교할 수 있다는 특징이 있다. 포인터는 어떤 변수가 있을 때 그 변수의 값이 아닌 메모리 주소를 가리키는 것을 뜻하며, 한 변수를 다른 변수에 복사할 때 반드시 이해하고 있어야 하는 개... golanggolang