无法使用 Cloud Shell 在 Oracle Cloud Function 中部署 Go

Can not deploy Go in Oracle Cloud Function using Cloud Shell

我尝试按照 official documentation instructions 创建和部署 Oracle Cloud Functions。我可以使用 java 运行time 创建和部署,但是当我部署时 go 运行time 总是 return 错误。

我尝试在 Oracle 云中使用此命令初始化 Go 函数 Shell:

fn init --runtime go hello-go

然后我尝试部署它

fn -v deploy --app test

但它 returned 错误如下:

Deploying hello-go to app: test
Bumped to version 0.0.7
Building image bom.ocir.io/bmptwl2psusa/repo/hello-go:0.0.7 
FN_REGISTRY:  bom.ocir.io/bmptwl2psusa/repo
Current Context:  ap-mumbai-1
Sending build context to Docker daemon  5.632kB
Step 1/10 : FROM fnproject/go:dev as build-stage
 ---> 96c8fb94a8e1
Step 2/10 : WORKDIR /function
 ---> Using cache
 ---> 8961dd299ec1
Step 3/10 : WORKDIR /go/src/func/
 ---> Using cache
 ---> 5a4c2c6e13f1
Step 4/10 : ENV GO111MODULE=on
 ---> Using cache
 ---> 22022ff2fcf8
Step 5/10 : COPY . .
 ---> 714622a6ff03
Step 6/10 : RUN cd /go/src/func/ && go build -o func
 ---> Running in 39fedbc476f4
build func: cannot find module for path github.com/fnproject/fdk-go
The command '/bin/sh -c cd /go/src/func/ && go build -o func' returned a non-zero code: 1


Fn: error running docker build: exit status 1

当我用java 运行time with fn init --runtime java hello-java命令时部署成功,为什么用go总是失败?

我试图在 hello-go 目录中 运行 go build -o func 但它是 returned:

go: finding module for package github.com/fnproject/fdk-go
go: writing stat cache: mkdir /usr/share/gocode/pkg: permission denied
go: downloading github.com/fnproject/fdk-go v0.0.3
func.go:10:2: mkdir /usr/share/gocode/pkg: permission denied

我知道这是因为 /usr/share/gocode/ 目录在 root 用户下,但我不知道如何更改该文件夹的权限,因为 Oracle Cloud Shell 不能使用 root 用户或 sudo。 (基于

如果我使用真正的 VM shell 或本地 shell/terminal,也许我可以做到,但我想使用 Oracle Cloud Shell 因为我只是按照建议我使用的官方说明进行操作Oracle Cloud Shell,那么如何使用 Oracle Cloud Shell 使用 Go 运行time 部署 Oracle Cloud Functions?

大部分官方文档只给出了使用Java 运行时间的例子,这让我在使用go时变得偏执。

这是 cloudshell 中的一个错误,我们正在找出解决的最佳方法。

作为短期解决方法,您可以执行此操作一次:

mkdir ${HOME}/gopath

然后在您的终端中设置:

export GOPATH=${HOME}/gopath

您可能应该编辑您的 ~/.bashrc 以自动设置 GOPATH 变量,这样您就不会忘记