Photo by Joshua Earle on Unsplash 개요 개발하던 서비스가 특정 Go 버전에서 (당시 최신버전) 문제가 발생하여서 계속 새로운 버전을 바꿔 깔아가며 테스트했던 기억이 있다. gvm 을 설치하면 여러 Go 버전을 설치할 수 있고, 바꿔가며 쓸 수 있다. GitHub 링크: https://github.com/moovweb/gvm 설치하기 WSL2 에서 bash/zsh 를 사용하는가 여부에 따라 아래 명령중 하나를 CLI 에서 실행하면 된다. $ bash <
Photo by Arian Darvishi on Unsplash 개요 Go modules 에 대해서 확인해보고, 나아가 vendor 쪽을 확실히 이해해보고 싶어서 아예 깨끗한 환경에서 Go 를 깔아보려 했는데 이왕 하는김에 윈도우의 WSL2 에 설치하고 간단히 개발할 수 있는 환경을 구축해보면 좋겠다 싶었다. 준비상황 WSL2 는 이미 사용할 준비가 되어 있고 zsh 및 oh my zsh 를 설치한 상태이며 Windows 에서는 VSCode 가 설치되어 있다. 참고 링크 - https://medium.com/@betakuang/setup-go-development-environment-with-vs-code-and-wsl-on-windows-62bd4625c6a7 - https://sal.as/post/..
Photo by Tobias Fischer on Unsplash개요 Golang 에서 쓸 수 있는 Key-value NoSQL Database 인 Bolt DB 를 이용해서 NoSQL 의 장점을 알아보자 * Key-value NoSQL Database 의 단점을 하나 짚고 넘어가자. Query 속도등에는 취약하다. - 이런게 필요하고 많은 데이터 및 성능이 중요하다면 SQLite 로 가자 링크 - 예제 GitHub: https://github.com/nicewook/boltdb-bolthold-nosql- BoltDB GitHub: https://github.com/boltdb/bolt- 현재는 stable 상태로 더 이상의 업데이트는 없다고 천명했으며- bbolt 로 fork 되어 개선되고 있다. ht..
Photo by Emile Perron on Unsplash 개요 Concurrency in Go 책의 http://aladin.kr/p/YLCKv 4장 패턴중에서 or-done-channel 을 정리해본다. 참고링크: https://jacking75.github.io/go_or-done-channel/ 참고링크: https://stackoverflow.com/questions/60491622/why-does-this-ordone-channel-implementation-receive-twice-from-done-channel 상황 값을 읽어서 처리할 채널 (myChan 이라고 하자)이 있고, 언제든 작업을 중단하도록 요청이 들어올 수 있는 채널 (done 이라고 하자) 이 있다고 하자. 보통의 경우는 ..
Photo by Sneaky Elbow on Unsplash 개요 프로그램의 버전관리를 하더라도 프로그램 실행시의 로그에 프로그램 build 시의 정보가 담겨있으면 좀더 정확하게 어느 시점의 code 로, 언제 build 한 녀석인지를 알아낼 수 있을 것이다. go build 에서 제공하는 -ldflags 옵션을 이용하여 1) git commit 을 한 날짜와 commit hash 2) go build 로 binary 를 생성한 날짜를 binary 실행시의 로그에 추가해보자 이를 참고로 하여, 다양하고 유용한 정보를 담을 수 있을 것이다. 실행예제 GitHub: https://github.com/nicewook/ldflags참고 링크: https://www.digitalocean.com/community..
개요 reflection 이라는 개념이 처음에는 참 어려웠다. Rob Pike 의 글을 따라가며 좀더 체계적으로 접근하며 이해해본다. - 링크: https://blog.golang.org/laws-of-reflection- 번역본 링크: https://johngrib.github.io/wiki/golang-the-laws-of-reflection/ Types and interfaces 예제 링크: https://play.golang.org/p/lcztLbvaUJj 간단히 몸을 풀어가자. MyInt 타입이 실제 int 값을 담더라도 MyInt 와 int 는 엄연히 다른 타입이다. - 따라서 두 타입의 변수간에는 할당, 비교등의 연산이 불가능하다. - type casting 을 해줘야만 연산이 가능해진다. ..
개요 Russ Cox 의 인터페이스 글을 기반으로 Interface 에 대해 좀 더 깊이 들여다 본다. 링크: https://research.swtch.com/interfaces 사용법 예제 링크: https://play.golang.org/p/AEHmlYtqkAy 1) ReadCloser 라는 인터페이스를 정의했다. - Read() 와 Close() 라는 메쏘드를 가진 type 이기만 하면 - ReadCloser 인터페이스를 만족한다. - 회사가 구인 광고에 워드와 엑셀을 할 수 있는 사람 이라고 올렸을때 - 내가 워드, 엑셀, 파워포인트, 포토샵을 할 수 있으면 지원이 가능한 것이다. 2) ReadAndClose() 라는 함수는 ReadCloser 인터페이스를 만족하는 타입을 파라미터로 받는다. 그리..
개요 사용자의 비밀번호를 그대로 보관하는 것은 위험하다. 비밀번호 보관에 특화된 bcrypt 를 알아보자. 참고링크 - 링크: https://auth0.com/blog/hashing-in-action-understanding-bcrypt/- 링크: https://d2.naver.com/helloworld/318732 TL;DR - 빠르게, 보안도 신경썼다는 티를 내면서 구현하려면 bcrypt 를 사용하자- 보안에 좀더 민감한 곳이라면 scrypt 를 쓰자 - 현 시점 비밀번호 저장의 끝판왕은 Argon2id 이다. 비밀번호를 보관하자. 1) Plaintext 를 저장한다면 데이터베이스가 털리면 바로 끝이다. - 이녀석 비밀번호는 asdf1234 이구나. 2) Hashing 을 한번 해주고 그걸 저장하면 ..
단도직입 언제 아래처럼 쓰고 if err := f(); err != nil { 언제 아래처럼 쓸 것인가? if err != nil { 규칙1. 가능하다면 if err := f(); err != nil { 를 써라. - Go 에서는 이렇게 하나로 묶어 쓰는걸 권장한다. - 아래 예시에서는 json.Unmarshal() 함수에서 이렇게 쓴다. - 이때 사용되는 err 변수는 if 문 안에서만 (= 빨간 테두리) 쓰인다. 규칙2. 리턴되는 값을 if 문 바깥에서도 쓰고 싶다면 if err != nil { 을 따로 쓴다. - 아래 예시에서는 json.Marshal() 함수에서 쓴다. - 이렇게 하면 bytes 변수의 범위 (scope) 가 if 문 바깥에서도 쓸 수 있다.
개요 링크의 Slice trick 들을 따라가 보며 정리해보았다. 링크: Slice Tricks: https://github.com/golang/go/wiki/SliceTricks append() 와 copy() 의 탄생 buiit-in 함수인 append() 와 copy() 가 제공되면서 container/vector 패키지는 더 이상 쓸 필요가 없다. Append - 뒤에 이어서 붙여넣기 a = append(a, b...) a 라는 슬라이스에 b 라는 녀석(들)을 뒤에 붙여준다. Copy - 복사하기 1) not perfect b = make([]T, len(a)) copy(b, a) 2) not perfect b = append([]T(nil), a...) 3) perfect b = append(a..
- Total
- Today
- Yesterday
- 엉클 밥
- 체호프
- 오블완
- 잡학툰
- solid
- go
- 2023
- 노션
- 영화
- notion
- clean agile
- OpenAI
- 티스토리챌린지
- intellij
- 인텔리제이
- Bug
- ChatGPT
- agile
- 독서후기
- 독서
- folklore
- strange
- 클린 애자일
- Gin
- 제이펍
- API
- websocket
- github
- bun
- golang
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |