Цель: Я хочу повторно использовать многие функции Go из двух функций Go с HTTP-триггерами.
Что я пробовал и шаги по воспроизведению проблемы:
- В GCP создайте новую облачную функцию Go 1.11, триггер HTTP
- Назовите ее:
MyReusableHelloWorld
- В
function.go
, вставьте:
package Potatoes
import (
"net/http"
)
// Potatoes return potatoes
func Potatoes(http.ResponseWriter, *http.Request) {
}
В
go.mod
, вставьте это:
module example.com/foo
В функцию для выполнения вставьте это:
Potatoes
Нажмите на развертывание. Это работает. Создайте еще одну безсерверную функцию Go в GCP В функции. иди, вставь это:
// Package p contains an HTTP Cloud Function.
package p
import (
"encoding/json"
"fmt"
"html"
"net/http"
"example.com/foo/Potatoes"
)
// HelloWorld prints the JSON encoded "message" field in the body
// of the request or "Hello, World!" if there isn't one.
func HelloWorld(w http.ResponseWriter, r *http.Request) {
var d struct {
Message string `json:"message"`
}
if err := json.NewDecoder(r.Body).Decode(&d); err != nil {
fmt.Fprint(w, "error here!")
return
}
if d.Message == "" {
fmt.Fprint(w, "oh boy Hello World!")
return
}
fmt.Fprint(w, html.EscapeString(d.Message))
}
В
go.mod
, вставьте это:
module example.com/foo
В функцию для выполнения вставьте это:
HelloWorld
Нажмите на развертывание.
Не работает. У вас есть ошибка: unknown import path "example.com/foo/Potatoes": cannot find module providing package example.com/foo/Potatoes
Я также перепробовал все виды комбинаций для модуля / пакетов для импорта,Я пробовал без example.com/ part.
Другая небольшая проблема: Все функции, которые я хочу использовать, могут находиться в одном файле и на самом деле не требуют триггера, ноне похоже, что без триггера невозможно.
Связанные вопросы и документация, с которыми я не смог достичь своей цели:
- Какя могу использовать подпакеты с Go в облачных функциях Google?
- https://github.com/golang/go/wiki/Modules, раздел go.mod