반응형

전체 글 426

[Golang] Json Unmarshal 시 에러 로깅

Json json.Unmarshal 을 할 때 에러 발생 시 타입이 json 타입이 아니게 되면 오류가 발생 할 수 있다. 오류 발생 시 변환 데이터와 변환하려는 타입을 알 수 없어 어떤 값인지 알기 어렵다. Unmarshal 함수 생성 로깅을 위한 ErrorData 구조체를 생성하여, 덕 타이핑을 통해 error interface type에 속하게 한다. Unmarshal 실패 시 error 데이터를 ErrorData 구조체에 할당하여 반환한다. ErrorData에 unmarshaling하려던 데이터를 InputData field에, 값을 저장할 데이터의 타입을 TargetType field에 저장하고, unmarshaling 실패 에러를 Err field에 저장한다. ErrorData 구조체의 포인터..

Golang 2023.08.16

[Golang] interface addressable

addressable address operator(&)로 주소를 참조할 수 있는 것을 의미한다. interface interface에 할당된 value는 주소를 지정할 수 없다. 아래 코드에서 setA함수가 pointer receiver 함수이기 때문에 해당 주소를 가져와서 포인터가 받는 메소드에 전달할 수 없으므로, a1 변수는 에러가 발생한다. type A interface { getA() string setA(s string) } type Astruct struct { s string } func (a Astruct) getA() string { return a.s } func (a *Astruct) setA(s string) { a.s = s } func main() { var a1 A = As..

Golang 2023.05.10

[Entgo] Hooks 사용 시 주의

Hooks 쿼리 등 작업 전 후에 원하는 코드 등을 추가하여 추가 작업을 할 수 있게 해준다. Where - ex) update 시 hook이 작동 될 수 있게 해당 schema에 hook을 OnUpdate에 적용을 해놨을 때, ent.Mutation의 데이터에 값이 들어있지 않는다. import ( gen "project/ent" "project/ent/hook" ) // user schema func (User) Fields() []ent.Field { return []ent.Field{ field.String("email"), field.String("password"), } } func (User) Hooks []ent.Hook { return []ent.Hook{ hook.If(func(next..

Golang/ORM 2023.03.23

[Golang] interface 타입 nil 체크

Golang에서 interface{} 타입은 기본적인 nil 체크를 했을 때 nil이라고 나오지 않는다. package main import "fmt" func main() { var x interface{} var b *string fmt.Println(isNil(x)) fmt.Println(isNil(b)) fmt.Println(b == nil) } func isNil(param interface{}) bool { return param == nil } 결과 true false true 위와 같이 b를 바로 nil인지 비교하면 true로 나오지만 isNil()이라는 함수를 통해서 interface{} 타입으로 전달되면 nil 체크를 하지 못한다. IsNil() reflect.ValueOf().IsNi..

Golang 2023.02.09

[Entgo] Hooks

Hooks - 필드를 미리 작성 후 generate 한 뒤 hook을 작성해야 각종 필드에 맞는 Mutatotion이 생성되어 있다. - 사용을 원할 때 main.go에 import _ "/ent/runtime" 를 작성해야 작동한다. Mutation Create: 생성될 때 작동 UpdateOne: 하나의 데이터가 업데이트 될 때 작동 Update: 여러 개의 데이터가 업데이트 될 때 작동 DeleteOne: 하나의 데이터를 삭제할 때 작동 Delete: 여러 개의 데이터를 삭제할 때 작동 Runtime Hooks - 로깅 등에 자주 사용 - schema hooks 보다 먼저 실행된다. - 아래와 같이 모든 Entity에 적용하는 hook을 작성할 수 있다. - hook.On을 사용하여 원하는 시점에..

Golang/ORM 2022.12.07

[Gin] time Parsing 오류 -> 원하는 포맷으로 타임 바인딩하는 법

time Parsing 오류 Gin Bind func Test(c *Gin.Context) { var body Body if err := c.Bind(&body); err != nil { c.JSON(400, err) return } c.JSON(200, nil) } type Body sturct { Birthday time.Time `json:"birthday" time_format:"2006-01-02 15:04:05"` } 위에처럼 Body 구조체가 있을 때 Gin에서 Binding 시 string으로 된 birthday를 전달하게 되면 아래 오류가 발생한다. parsing time "\"2016-01-02 15:04:05\"" as "\"2006-01-02T15:04:05Z07:00\"": can..

Golang/Framework 2022.11.24

13. 네트워크와 분산 시스템

네트워크와 분산 시스템 네트워크와 인터넷 네트워크 구성 방식 강결합 시스템 네트워크로 연결된 모든 컴퓨터의 프로세서가 하나의 메모리를 공유하는 방식 약결합 시스템에 비해 속도 ⬆️ 프로세서들이 하나의 공유 메모리를 사용하여 통신한다 -> 공유 메모리를 서로 사용하기 위해 경쟁 : 결합 교환(Combining switch, 하나의 공유 메모리를 차지하려는 여러 프로세서 중 하나만 골라서 메모리 접근을 허락하는 방식) 약결합 시스템 둘 이상의 독립된 시스템 연결 각 컴퓨터는 각각 독립적으로 운영되다가 필요할 때 통신선으로 메시지 전달 or 원격 프로시저 호출(RPC) 통신 오버헤드 -> 속도 ⬇️ 각각 독립적으로 작동하기 때문에 오류 발생 시 다른 시스템에 영향 X 프로토콜 - 통신 규약 - 다른 기기 간에..

개념 2022.11.13
728x90
반응형