このトピックでは、Goのイベントハンドラーの構造と特性について説明します。
イベントハンドラーを使用するためのサンプルコード
go用にaliyun/serverless/fc-runtime-Go-SDK /fcという名前の公式sdkライブラリをインポートし、ハンドラーとmain関数を実装します。 サンプルコード:
package main
import (
"fmt"
"context"
"github.com/aliyun/fc-runtime-go-sdk/fc"
)
type StructEvent struct {
Key string `json:"key"`
}
func HandleRequest(ctx context.Context, event StructEvent) (string, error) {
return fmt.Sprintf("hello, %s!", event.Key), nil
}
func main() {
fc.Start(HandleRequest)
}event入力パラメーターの値は、次のサンプルコードに示すように、key情報を含むJSON文字列です。
{
"key": "value"
}次の内容では、サンプルコードのコードスニペットについて説明します。
パッケージメイン:メインパッケージ。 各Goアプリケーションにはメインパッケージが含まれています。import: Function Computeの依存関係をインポートします。 次の依存関係をインポートする必要があります。github.com/aliyun/fc-runtime-go-sdk/fc: Go用Function Compute SDKのコアライブラリ。context: Function Compute SDK for Goのコンテキストオブジェクト。
func HandleRequest(ctx context.Context, event StructEvent) (string, error): イベントリクエストの処理に使用されるハンドラー。 ハンドラーには、実行するコードが含まれており、次のパラメーターが含まれます。ctx context.Context: function Computeで関数が呼び出されたときのランタイムコンテキスト情報を提供します。 詳細は、「コンテキスト」をご参照ください。event StructEvent: 関数が呼び出されたときに渡されるデータを指定します。 複数のデータ型がサポートされています。string, error: STRINGエラータイプとエラーメッセージを返します。 詳細については、「エラー処理」をご参照ください。return fmt.Sprintf("hello,% s! ", event.Key), nil:helloと渡されたeventパラメーターの値を返します。nilが返された場合、エラーは発生しません。
func main(): function Computeで実行中の関数コードのエントリポイント。 Goアプリケーションにはmain関数が含まれている必要があります。fc.Start(HandleRequest)を追加して、Function Computeでアプリケーションを実行できます。重要HTTPハンドラーとイベントハンドラーの起動に使用されるメソッドは異なります。 イベントハンドラーを開始するには、
main関数のfc. start関数を呼び出します。 HTTPハンドラーを開始するには、main関数のfc.StartHttp関数を呼び出します。
イベントハンドラーの署名Signatures for event handlers
次の項目は、イベントハンドラの有効なシグネチャを示しています。 InputTypeおよびOutputTypeオブジェクトは、encoding/json標準ライブラリと互換性があります。
Function Computeは、json.Unmarshalメソッドを使用してInputTypeオブジェクトを逆シリアル化し、json.Marshalメソッドを使用してOutputTypeオブジェクトをシリアル化します。 関数によって返されるデータを逆シリアル化する方法の詳細については、「JSON Unmarshal」をご参照ください。
func ()func () エラーfunc (InputType) エラーfunc () (OutputType, error)func (InputType) (OutputType, error)func (context.Context) エラーfunc (context.Context, InputType) エラーfunc (context.Context) (OutputType, error)func (context.Context, InputType) (OutputType, error)
次のルールに基づいてイベントハンドラーを使用する必要があります。
ハンドラーは関数である必要があります。
ハンドラーには、最大2つの入力パラメーターを含めることができます。 ハンドラーに2つの入力パラメーターが含まれている場合、最初の入力パラメーターは
context.Contextである必要があります。ハンドラーは最大2つの値を返すことができます。 値が1つだけ返される場合、値は
errorタイプを示す必要があります。 2つの値が返された場合、2番目の値はエラーメッセージを示す必要があります。
Goのイベントハンドラーのサンプルコード:
event-struct.go:
eventオブジェクトがSTRUCT型であるハンドラーのサンプルコード。event-string.go:
eventオブジェクトがSTRING型であるハンドラーのサンプルコード。event-map.go:
eventオブジェクトがmap[string]interface{}型であるハンドラーのサンプルコード。
他のハンドラーのサンプルコードの詳細については、examplesをご覧ください。
背景
コンテキストの詳細については、「コンテキスト」をご参照ください。