묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Golang을 통한 백엔드 개발 및 환경 구축하기
UserResponse struct 질문
go 언어 사용이 익숙치 않아 질문드립니다. ㅜㅜAPIResponse 와 User 모두 json 태그가 붙은 구조체로 보이는데, 어떤 기준? 방식으로 포인터 구조체, 일반 구조체를 사용하시는지 알 수 있을까요? 해당 영상내 ApiResponse만 포인터 구조체를 사용하신 이유를 알 수 있을까요?
-
해결됨Golang을 통한 백엔드 개발 및 환경 구축하기
키보드 어떤거 사용하시는지요?
혹시 어떤 키보드 사용하시는지요 .😀
-
해결됨Golang을 통한 백엔드 개발 및 환경 구축하기
repository 트랜잭션 관련 질문
안녕하세요 스프링으로 개발하고 있는 뉴비인데, 최근에 golang에 흥미가 생겨서 강의를 듣게 되었습니다.이제 강의를 다 수강하고, gorm을 사용해서 db연결까지 해보려고 하는데, 궁금증이 생겨서, 강의의 범위를 벗어나지만 질문드리려고 합니다스프링에서는 서비스 계층에 트랜잭션을 선언후 그 안에서 벌어지는 db관련 로직들을 원자적으로 실행할 수 있습니다. 트랜잭션의 전파를 통해, 서비스에서 다른 서비스를 호출해도 하나의 트랜잭션으로 묶을 수 있고요. gin에서 동일한 결과를 내고 싶은데, 제가 찾은 방법 2가지가 있습니다 DB 객체를 서비스에서 필드로 보관하면서 repository를 호출할때마다 인자로 DB에 트랜잭션을 적용해 를넘겨준다 (또는 트랜잭션을 받는 wrapper function을 사용한다) => 코드작성량이 ㄷㄷrepository에 임시적인 WithTransaction(tx)메서드를사용해, repository의 DB가 임시로 트랜잭션을 바라보게한다. =>싱글톤에서 말도 안되는 방법인거 같은데 gpt가 강추함컨텍스트에 트랜잭션 DB객체를 담아 모든 곳에서 꺼내 사용한다 => gpt, google 모두 권장되지 않는 방법이라고 함3줄요약전부다 다 뭔가 이상한거 같아서, 실무에서 golang을 사용하면 서비스에서 다수의 DB접근이 필요하고, 이를 하나의 트랜잭션으로 관리해야될 때 어떻게 트랜잭션을 처리하는지 궁금합니다!!
-
미해결Golang을 통한 백엔드 개발 및 환경 구축하기
hello world 가 2번 뜨는 이유가 뭘까요?
간단한 질문입니다만 localhost:8080 으로 접속했을 때 콘솔에 hello world가 2번 뜨는 이유를 몰라서 여쭙습니다.
-
미해결Golang을 통한 백엔드 개발 및 환경 구축하기
소스 코드가 있는 github 주소 공유 부탁드려도 될까요?
소스 코드가 있는 github 주소 공유 부탁드려도 될까요?
-
해결됨Golang을 통한 백엔드 개발 및 환경 구축하기
강의 코드 따라친거 public repository에 올려도 되나요?
저작권에 위배될까요?
-
해결됨Golang을 통한 백엔드 개발 및 환경 구축하기
service, repository 단계 구성하기 - 1
이 챕터에서 시작할때 network/user.go에서 갑자기 코드가 바꼈는데 이 부분은 임의로 작성하신건가요? &types.GetUserResponse{}, &types.CreateUserResponse{}, 나머지 두개 타입 update, delete. 작성하셨다면 types에 user.go에 작성하셨다는건데 일부러 뛰어 넘으신건지 궁금합니다.
-
해결됨Golang을 통한 백엔드 개발 및 환경 구축하기
delete 에러 관련되서 질문이 있습니다.
2023/11/20 20:44:01 http: panic serving [::1]:8034: runtime error: invalid memory address or nil pointer dereferencegoroutine 51 [running]:net/http.(*conn).serve.func1() C:/Program Files/Go/src/net/http/server.go:1854 +0xbfpanic({0xec01a0, 0x126f410}) C:/Program Files/Go/src/runtime/panic.go:890 +0x263github.com/dev-yakuza/study-golang/gin/start/repository.(*UserRepository).Delete(0xc0000a4030, {0x12466f8, 0x1}) C:/go_gin/src/CURS_SERVICE/repository/user.go:42 +0x36agithub.com/dev-yakuza/study-golang/gin/start/service.(*User).Delete(...) C:/go_gin/src/CURS_SERVICE/service/user.go:27github.com/dev-yakuza/study-golang/gin/start/network.(*userRouter).delete(0xc000444530, 0xc000456100) C:/go_gin/src/CURS_SERVICE/network/user.go:104 +0x1cagithub.com/gin-gonic/gin.(*Context).Next(...) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0005841a0, 0xc000456100) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:620 +0x66bgithub.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0005841a0, {0xfeda80?, 0xc00045e0e0}, 0xc000456200) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:576 +0x1ddnet/http.serverHandler.ServeHTTP({0xfecb10?}, {0xfeda80, 0xc00045e0e0}, 0xc000456200) C:/Program Files/Go/src/net/http/server.go:2936 +0x316net/http.(*conn).serve(0xc0004fa090, {0xfee018, 0xc0000a27e0}) C:/Program Files/Go/src/net/http/server.go:1995 +0x612created by net/http.(*Server).Serve C:/Program Files/Go/src/net/http/server.go:3089 +0x5ed관련된 에러가 나고 있습니다.for index, user := range u.userMap { if user.Name == userName { u.userMap = append(u.userMap[:index], u.userMap[index+1:]...) isExisted = true continue } } 해당코드에서 user가 nil일 경우에도 for문이 실행이 되고 있습니다. 혹시 이게 u.userMap이 자동적으로 뒤에 nil이 있는 것으로 확인이 됩니다. 혹시 다른 설정하신게 있으실까요?아니면 append가 패치된 상황일까요?일단은for index, user := range u.userMap { if user != nil { if user.Name == userName { u.userMap = append(u.userMap[:index], u.userMap[index+1:]...) isExisted = true continue } } }이렇게 해결 했습니다.
-
해결됨Golang을 통한 백엔드 개발 및 환경 구축하기
서버 구조에 대한 질문
이 프로젝트 서버 구조가 mvc 패턴에 기반한 건가요?계속 공부하다 보니 뭔가 헷갈리네요 ㅠㅠ
-
해결됨Golang을 통한 백엔드 개발 및 환경 구축하기
create 요청시 에러
2023/11/16 23:42:58 http: panic serving [::1]:6279: Undefined validation function 'require' on field 'Name'goroutine 21 [running]:net/http.(*conn).serve.func1() C:/Program Files/Go/src/net/http/server.go:1854 +0xbfpanic({0x8d4c00, 0xc000061b50}) C:/Program Files/Go/src/runtime/panic.go:890 +0x263github.com/go-playground/validator/v10.(*Validate).parseFieldTagsRecursive(0xc00014e0e0, {0x8bf3a5?, 0x9661a2?}, {0x8bf38b, 0x4}, {0x0, 0x0}, 0x0) C:/go_gin/pkg/mod/github.com/go-playground/validator/v10@v10.16.0/cache.go:299 +0xa39github.com/go-playground/validator/v10.(*Validate).extractStructCache(0xc00014e0e0, {0x909600?, 0xc000008108?, 0x1f4e0985898?}, {0x8b7042, 0xd}) C:/go_gin/pkg/mod/github.com/go-playground/validator/v10@v10.16.0/cache.go:156 +0x5acgithub.com/go-playground/validator/v10.(*validate).validateStruct(0xc00043a240, {0xa1ce68, 0xc000026158}, {0x909600?, 0xc000008108?, 0xcb2930?}, {0x909600?, 0xc000008108?, 0x0?}, {0xa220a8, ...}, ...) C:/go_gin/pkg/mod/github.com/go-playground/validator/v10@v10.16.0/validator.go:37 +0x19dgithub.com/go-playground/validator/v10.(*Validate).StructCtx(0xc00014e0e0, {0xa1ce68, 0xc000026158}, {0x909600, 0xc000008108?}) C:/go_gin/pkg/mod/github.com/go-playground/validator/v10@v10.16.0/validator_instance.go:394 +0x479github.com/go-playground/validator/v10.(*Validate).Struct(...) C:/go_gin/pkg/mod/github.com/go-playground/validator/v10@v10.16.0/validator_instance.go:367github.com/gin-gonic/gin/binding.(*defaultValidator).validateStruct(0xcb2930, {0x909600, 0xc000008108}) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/binding/default_validator.go:80 +0x4egithub.com/gin-gonic/gin/binding.(*defaultValidator).ValidateStruct(0x909600?, {0x909600?, 0xc000008108?}) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/binding/default_validator.go:59 +0x189github.com/gin-gonic/gin/binding.(*defaultValidator).ValidateStruct(0xc000436000?, {0x8e4840?, 0xc0000080c0?}) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/binding/default_validator.go:57 +0x105github.com/gin-gonic/gin/binding.validate(...) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/binding/binding.go:120github.com/gin-gonic/gin/binding.decodeJSON({0x1f4e0aa8188?, 0xc000038040?}, {0x8e4840, 0xc0000080c0}) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/binding/json.go:55 +0xa2github.com/gin-gonic/gin/binding.jsonBinding.Bind({}, 0xa1a460?, {0x8e4840, 0xc0000080c0}) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/binding/json.go:37 +0x66github.com/gin-gonic/gin.(*Context).ShouldBindWith(...) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:741github.com/gin-gonic/gin.(*Context).ShouldBindJSON(...) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:701github.com/dev-yakuza/study-golang/gin/start/network.(*userRouter).create(0xc000098080, 0xc00051c100) C:/go_gin/src/CURS_SERVICE/network/user.go:43 +0xbfgithub.com/gin-gonic/gin.(*Context).Next(...) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0000844e0, 0xc00051c100) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:620 +0x66bgithub.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0000844e0, {0xa1c940?, 0xc0001920e0}, 0xc00051c000) C:/go_gin/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:576 +0x1ddnet/http.serverHandler.ServeHTTP({0xa1b9d0?}, {0xa1c940, 0xc0001920e0}, 0xc00051c000) C:/Program Files/Go/src/net/http/server.go:2936 +0x316net/http.(*conn).serve(0xc000190240, {0xa1ced8, 0xc0000907e0}) C:/Program Files/Go/src/net/http/server.go:1995 +0x612created by net/http.(*Server).Serve C:/Program Files/Go/src/net/http/server.go:3089 +0x5ed무슨에러인지 알 수 있을까요?
-
해결됨Golang을 통한 백엔드 개발 및 환경 구축하기
1분24초에 go run .를 실행할때 filepath에러
main에서 filePath에 "./config.toml" 경로를 전달하면 config.go에서 NewConfig함수를 실행할 때 os.Open에 ./cofig.toml은 결국 config.go가 현재경로 기준이 되는게 아닌가요?