GoのCloudFunctionsデプロイ時のエラー

2023/05/09に公開

GoのCloudFunctionsデプロイ時のエラー

GoogleCloudのCloudFunctionsについてです。

デプロイすると、このようなエラーが出ます。

log
status: {
	code: 3
	message: "Build failed: functions.local/app/main.go:18:2: import "example.com/myproject" is a program, not an importable package; Error ID: ...."
}
main.go
package main

import (
	...
)

func MyHandler(w http.ResponseWriter, r *http.Request) {
	...
go.mod
module example.com/myproject

go 1.20

require (
	...
)

解決

main.goのパッケージ名を修正します。

main.go
package p

するとどうでしょう、成功するではありませんか!

パッケージ名をmainにした時だけデプロイに失敗します。

↓ChatGPTより

Cloud Functionsのデプロイには、Goの特定のビルドモードが必要です。Goのビルドモードには、exec-shared、**sharedの3つのモードがあります。Cloud Functionsのデプロイには、exeモードを使用する必要があります。c-sharedおよびshared**モードは、Cloud Functionsでサポートされていません。

Goのビルドモードは、Goのビルドツールである**go buildコマンドの引数によって指定されます。Goの標準ビルドモードはexeモードであり、go buildコマンドを実行する場合には、引数を指定しなくても自動的にexe**モードが選択されます。

しかし、**mainパッケージを含むGoのプログラムをビルドする場合、go buildコマンドに-buildmode=exeの引数を指定する必要があります。この引数を指定しない場合、c-sharedモードが自動的に選択されます。c-shared**モードでは、共有ライブラリをビルドするためのオプションが有効になりますが、Cloud Functionsは共有ライブラリをサポートしていません。

ということらしいです。
これは間違い無いだろう、と決めつけて視野を狭めてしまうのはよく無いと改めて思いました。

Discussion