このトピックでは、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をご覧ください。
背景
コンテキストの詳細については、「コンテキスト」をご参照ください。