.vscode | ||
network | ||
protobuf@0614836308 | ||
.gitignore | ||
.gitmodules | ||
docker-compose.yml | ||
go.mod | ||
go.sum | ||
README.md | ||
ytfunction_test.go | ||
ytfunction.go |
Набор инструментов для функций
Пакет
Сообщение является бинарным пакетом. Для работы с ним его для начала необходимо десериализовать. Для этого используется protocol buffer
После десериализации присутствует 4 поля:
- Параметры заголовка, которые передаются с пакетом (например http-заголовки). Формат заголовка типа key:string=valye:string
- Метаданные. В этом поле передаются служебные данные для самого SDK.
- Бинарные данные, которые, которые передаются в функцию
Сборка
Подготовка пакетов
apt install protobuf-compiler
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
Подготовка файлов
protoc --go_out=. ./protobuf/*
Исользование
Пример использования:
package main
import (
"git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git/network"
funcSDK "git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git/network"
)
func main(){
addr, exists := os.LookupEnv("NATS_ADDR")
if !exists {
addr = "nats://localhost:4222"
}
serve = funcSDK.NewServe(addr, "", "test", nil)
if serve == nil {
panic(fmt.Errorf(`serve is not created`))
}
serve.AddAccept("*")
err := serve.Run()
if err != nil {
panic(err)
}
var err error
err = serve.RegisterFunction("testFuncSimple", func(header *network.Header, paylod []byte) (result []byte, err error) {
header.ResponseHeaders["test"] = "my test"
return []byte("world"), nil
})
if err != nil {
t.Error("Has error: ", err)
return
}
var result []byte
var header *network.Header
result, header, err = serve.Call("default.test.testFuncSimple", nil, []byte("Hello"))
if err!=nil{
panic(err)
}
fmt.Println(header)
fmt.Println(string(result))
}