괴발개발 성장기
반응형

Study/Go 언어 50

[Golang] 만 나이 구하는 코드

# 배경 법적 대리인이 19세 미만이면 안돼서 만 나이를 구해서 체크 했다. # 코드 func GetAge(birthDate string) int64 { birthMonth, _ := time.Parse("01", birthDate[4:6]) birthDay, _ := time.Parse("02", birthDate[7:]) birthYear, _ := strconv.Atoi(birthDate[:4]) now := time.Now() age := now.Year() - birthYear // 생일이 지나지 않았을 경우 나이에서 1을 빼줌 if now.Month() < birthMonth.Month() || (now.Month() == birthMonth.Month() && now.Day() < birth..

Study/Go 언어 2023.09.12

[Golang] 14세 미만 체크하는 코드

# 배경 기부금영수증을 신청할 때 14세 미만인 경우는 법적 대리인이 동의가 필요하다. 그래서 나이를 체크하는 코드를 만들었다. # 코드 func CheckUnderTheAgeOfFourteen(birthDate string, seventhDigit int64) bool { birthMonth := birthDate[2:4] // 생월(MM) birthDay := birthDate[4:6] //생일 birthYear, _ := strconv.Atoi(birthDate[:2]) if seventhDigit == 1 || seventhDigit == 2 || seventhDigit == 5 || seventhDigit == 6 { birthYear = 1900 + birthYear } if seventhDi..

Study/Go 언어 2023.09.11

[Golang] 스웨거(Swagger) 사용하기

# 배경 2년 전에 자바는 API문서를 자동화로 만들어 주는게 있는데 go는 있냐는 말에 열심히 찾았다. 그 때 정보가 지금처럼 많지 않았다. 그래도 만드는 법을 알게 되었다. 하지만 회사 서비스에 적용시키기엔 우선순위가 낮았다. 2년이 지난 지금 스웨거를 적용시키게 되었다. 기본적인 것을 잘되지만 하다보면 예외들도 많았다. 내가 찾아본 것들을 기록해보자! # 하는 방법 1) 우선 echo-swagger 설치하자 go get -u github.com/swaggo/echo-swagger 2) import에 2개의 주소를 추가하자 echoSwagger "github.com/swaggo/echo-swagger" _ "study-service/docs" _ "study-service/docs" 이걸 넣지 않으면..

Study/Go 언어 2023.09.04

[Golang] Xorm에 AllCols() 이걸 사용할 때 bool 타입은 업데이트가 안된다.

# 배경 입사 초기에 데이터 Update를 하는데 다 바뀌는데 bool 타입의 값이 변경되지 않았다. 당시에는 경험도 지식도 없어서 해결하는데 많은 시간이 걸렸다. # 문제의 코드 _, err := common.GetDB(ctx).Where("id = ?", campaign.Id).AllCols().Update(campaign) AllCols() : 모든 컬럼을 업데이트 시켜준다. 그런데 bool 타입의 컬럼은 false 값만 된다. # 해결 방법 1) UseBool("컬럼명")을 적으면 bool 타입의 컬럼명을 작성한다. _, err := common.GetDB(ctx).Where("id = ?", campaign.Id).UseBool("컬럼명").AllCols().Update(campaign) 2) ..

Study/Go 언어 2023.08.02

[Golang] interface{} => struct 변환하기

# 배경 배열안에 map이 여러개 있다. map안에는 값이 여러개 있다. 배열안에 있는 map의 타입은 interface{} 이다. donationInfo 안에는 []interface{} 타입으로 값이 있다. donationInfo := dataHTML.Content["donationInfo"].([]interface{}) map[donationDate:20220328 donationId:279939 totalAmount:3076 totalQuantity:2] map[donationDate:20220316 donationId:279936 totalAmount:54834 totalQuantity:4] map[donationDate:20220316 donationId:279935 totalAmount:483..

Study/Go 언어 2023.07.22

[Golang] 슬랙(Slack)으로 메시지 보내기

# 배경 우리 팀은 두레이라는 툴을 사용한다. 대부분은 슬랙을 많이 이용하는 것 같다. 그래서 에러 메시지를 슬랙으로 보내는 걸 공부해봤다. # 셋팅 2023.07.06 - [사이드 프로젝트/Amazon SQS] - [slack] 슬랙(slack)으로 에러 메시지를 받기 위해서 slack에서 설정하기 [slack] 슬랙(slack)으로 에러 메시지를 받기 위해서 slack에서 설정하기 1) https://api.slack.com/ 접속하기 Slack은 생산성 플랫폼입니다 Slack은 팀과 커뮤니케이션할 수 있는 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다. slack.com 2) 오른쪽 상단 pink1016.tistory.com 우선 슬랙에서 설정을 해야한다. # 토큰 값 설정..

Study/Go 언어 2023.07.14

[Golang] 원하는 문자열 찾기

# 배경 기부금 영수증 관련한 API 중에서 속도가 느린게 몇 개 있었다. 속도 개선을 시킨 후 속도를 체크하고 싶었다. 그래서 내가 원하는 API 주소만 따로 내 프로젝트에 글을 남기고 싶었다. (4초 이상인 API만 글이 자동으로 남겨진다.) 내가 원하는 API 주소가 있는 찾기 위해서 원하는 문자열을 찾는 법을 알고 싶었다. # 문법 bool := strings.Contains(문자열, 찾고싶은문자열) 결과 값는 true, false가 두개 나온다. # 예시 strings.Contains("genie", "en") // true strings.Contains("genie", "ne") // false # 실제 사용한 경우 if strings.Contains(req.RequestURI, "donors..

Study/Go 언어 2023.07.03

[Golang] context.WithTimeout과 context.WithDeadline

context.WithTimeout과 context.WithDeadline는 내부는 똑같다. 하지만 의미적으로 차이가 있다. 둘 다 특정 시간이 되면 취소된다. context.WithTimeout과 context.WithDeadline는 취소 함수 (WithCancel)의 리턴값이 같다. # 내부 func WithDeadline(parent Context, d time.Time) (Context, CancelFunc) { return c, func() { c.cancel(true, Canceled) } } func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { return WithDeadline(parent, time..

Study/Go 언어 2022.11.03

[golang] context.WithCancel() 사용법

# WithCanel() WithCancel(parent Context) (ctx Context, cancel CancelFunc) # context.WithCancel() 혼자 사용할 수 없다. `WithCancel()`는 parent context를 넣어줘야한다. 그래서 `Background()`가 필요하다. 새로운 context와 CancelFunc가 나온다. 호출하면 바로 context가 종료 된다. ctx := context.Background() ctx, cancel := context.WithCancel(ctx) fmt.Println(ctx.Err()) //nil cancel() // 호출하면 컨텍스트가 종료가 된다. fmt.Println(ctx.Err()) //context canceled..

Study/Go 언어 2022.10.13

[golang] context 역할 및 종류

# 배경 API를 만들다 보면 처음부터 끝까지 ctx echo.Context를 사용한다. 그래서 context가 궁금했다. 그리고 PT 실무에서도 설명을 해주셨다. # Context 애플리케이션 전체 => 코드 전체 request에서 response의 맥락을 가지고 있다. # Context의 역할 정보를 담는다 => service에서 사용 , 로그에 남길 애플리케이션 전반에 공통적인 정보(Ex) 서버 정보, Request ID 종료 사인을 보낸다 => context가 취소될 경우 디비 세션이 만료되어 디비처리가 중단된다. # 종류 1) context.Background() , context.TODO() 특별한 기능이 없이 초기화 용로로 사용 내부적으로 둘은 똑같다 두가지만 혼자 context 생성 가능 ..

Study/Go 언어 2022.10.12
반응형