반응형

Golang 44

[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

[Fiber] Fiber란

Fiber - Go의 Framework - Fasthttp 기반 성능 fiber에서 제공하는 벤치마크 테스트에서 속도가 다른 많이 사용하는 gin, echo 등에 비해 빠른 것을 볼 수 있다. AllParams - Path Parameter로 전달된 파라미터를 추출하는 방법 - *를 사용해 여러 개의 Path를 받고 싶을 땐, 순서에 따라 Key가 *1, *2가 된다. - ex) /user/*/test/* -> /user/soomin/genie/test/hi/bye {"*1": "soomin/genie", "*2": "hi/bye"} // GET http://example.com/user/fenny app.Get("/user/:name", func(c *fiber.Ctx) error { c.AllPara..

Golang/Framework 2022.10.14

[GORM] Query

Query 기본 type User struct { ID uint Name string Age int } var users []User db.Model(&user{}).Find(&users) // user에 대한 모든 데이터 출력 Map으로 찾기 var results []map[string]any db.Model(&User{}).Find(&results)//key : column명, value : 값으로 매칭되어 map slice로 들어가게 된다. FirstOrInit db.FirstOrInit(&user, User{Name: "none_existing"}) db.FirstOrInit(&user, User{Name: "soomin"}) // User데이터 존재 시 DB에서 first(order by Id)..

Golang/ORM 2022.09.28
728x90
반응형