Go 함수는 일반적으로 오류 발생 시 오류값을 반환합니다. 사용자 지정 함수 또는 런타임에서 제공된 항목에서 발생한 오류를 처리하기 위해서 오류 반환값을 검사해야 합니다.
1
2
3
4
5
6
7
8
9
10
funcwillError()(string,error){return"",errors.New("i'm an error")}response,err:=willError()// Handle error.
iferr!=nil{logger.Error("an error occurred: %v",err)}
이 패턴을 사용하여 오류 처리 및 검사에 대한 모든 런타임 API 호출을 적용하는 것이 좋습니다.
1
2
3
4
5
// Will throw an error because this function expects a valid user ID.
account,err:=nk.AccountGetId(ctx,"invalid_id")iferr!=nil{logger.Error("account not found: %v",err)}
오류 코드 상수를 정의한 다음, runtime.NewError("error message", GRPC_CODE) 함수를 사용하여 error 개체를 정의할 수 있습니다. 다음은 모듈에서 정의할 수 있는 오류의 예시입니다.
1
2
3
4
5
6
7
8
var(errBadInput=runtime.NewError("input contained invalid data",INVALID_ARGUMENT)errInternalError=runtime.NewError("internal server error",INTERNAL)errGuildAlreadyExists=runtime.NewError("guild name is in use",ALREADY_EXISTS)errFullGuild=runtime.NewError("guild is full",RESOURCE_EXHAUSTED)errNotAllowed=runtime.NewError("operation not allowed",PERMISSION_DENIED)errNoGuildFound=runtime.NewError("guild not found",NOT_FOUND))
funcCreateGuildRpc(ctxcontext.Context,loggerruntime.Logger,db*sql.DB,nkruntime.NakamaModule,payloadstring)(string,error){// ... check if a guild already exists and set value of `alreadyExists` accordingly
varalreadyExistsbool=trueifalreadyExists{return"",errGuildAlreadyExists}return"",nil}funcBeforeAuthenticateCustom(ctxcontext.Context,loggerruntime.Logger,db*sql.DB,nkruntime.NakamaModule,in*api.AuthenticateCustomRequest)(*api.AuthenticateCustomRequest,error){// Only match custom Id in the format "cid-000000"
pattern:=regexp.MustCompile("^cid-([0-9]{6})$")if!pattern.MatchString(in.Account.Id){returnnil,errBadInput}returnin,nil}
서버를 로컬로 실행할 수 있는 가장 쉬운 방법은 Docker를 사용하는 것입니다. Nakama에서 Go 모듈을 사용하려면 Nakama 바이너리를 컴파일할 때 사용한 것과 동일한 버전의 Go를 사용해야 합니다. 이를 보장하기 위해서 아래와 같이 동일한 버전의 nakama-pluginbuilder 태그와 nakama 이미지를 사용하면 됩니다.
Dockerfile(이)라는 파일을 생성합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FROM heroiclabs/nakama-pluginbuilder:3.22.0 AS builderENV GO111MODULE onENV CGO_ENABLED 1WORKDIR /backendCOPY . .RUN go build --trimpath --buildmode=plugin -o ./backend.soFROM heroiclabs/nakama:3.22.0COPY --from=builder /backend/backend.so /nakama/data/modulesCOPY --from=builder /backend/local.yml /nakama/data/COPY --from=builder /backend/*.json /nakama/data/modules