GoogleCloudFunctionsのエミュレータをGoで試してみたところ

# ローカルで実行したい場合
nodejsがインストールされている前提で

```
# npm
$ npm install -g @google-cloud/functions-emulator

# yarn
$ yarn global add @google-cloud/functions-emulator
```

インストールが無事完了したか確認

```
$ which functions
/xxxx/.nodebrew/current/bin/functions
```

これでfunctionsコマンドを使ってGCFをエミュレートできるようになる。


# Debug
## エミュレーターを起動させる
```
$ functions start
Starting Google Cloud Functions Emulator...
Google Cloud Functions Emulator STARTED
No functions deployed ¯\_(ツ)_/¯. Run functions deploy --help for how to deploy a function.
```

## デプロイする
```
$ functions deploy helloWorld --trigger-http
```

# ここまでやって気づいたこと
淡い期待を持ってここまでやってきた。
このエミュレータがGoでも使えると。
が、デプロイできなかった。

自分のところでは上記デプロイコマンドを実行すると以下のエラーが発生。

```
ERROR: Function load error: Code could not be loaded.
ERROR: Does the file exists? Is there a syntax error in your code?
ERROR: Detailed stack trace: module.js:478
    throw err;
    ^

Error: Cannot find module '/path/to/helloWorld'
    at Function.Module._resolveFilename (module.js:476:15)
    at Function.Module._load (module.js:424:25)
    at Module.require (module.js:504:17)
    at require (internal/module.js:20:19)
    at [eval]:1:40
    at ContextifyScript.Script.runInThisContext (vm.js:25:33)
    at Object.runInThisContext (vm.js:97:38)
    at Object.<anonymous> ([eval]-wrapper:6:22)
    at Module._compile (module.js:577:32)
    at evalScript (bootstrap_node.js:358:27)

ERROR: Error: Failed to deploy function.
    at exec (/path/to/.nodebrew/node/v6.16.0/lib/node_modules/@google-cloud/functions-emulator/src/cli/controller.js:126:22)
    at ChildProcess.exithandler (child_process.js:206:5)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:191:7)
    at maybeClose (internal/child_process.js:920:16)
    at Socket.<anonymous> (internal/child_process.js:351:11)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at Pipe._handle.close [as _onclose] (net.js:509:12)
```

試しにこのエミュレータのREADMEにある、

```
$ touch index.js
$ echo 'exports.helloWorld = (req, res) => res.send("Hello, World!");' > index.js
```

をやってみて、デプロイすると無事デプロイができた。

```
$ functions deploy helloWorld --trigger-http
Copying file:///var/folders/vp/z7yl1cwd3jv_scvfktrw_pgnfvwztc/T/tmp-24247y7xWy69C1ctw.zip...
Waiting for operation to finish...done.
Deploying function......done.
Function helloWorld deployed.
┌────────────┬───────────────────────────────────────────────────────────────────────────────────┐
│ Property   │ Value                                                                             │
├────────────┼───────────────────────────────────────────────────────────────────────────────────┤
│ Name       │ helloWorld                                                                        │
├────────────┼───────────────────────────────────────────────────────────────────────────────────┤
│ Trigger    │ HTTP                                                                              │
├────────────┼───────────────────────────────────────────────────────────────────────────────────┤
│ Resource   │ http://localhost:8010/path/to/helloWorld                           │
├────────────┼───────────────────────────────────────────────────────────────────────────────────┤
│ Timeout    │ 60 seconds                                                                        │
├────────────┼───────────────────────────────────────────────────────────────────────────────────┤
│ Local path │ /path/to/helloWorld                   │
├────────────┼───────────────────────────────────────────────────────────────────────────────────┤
│ Archive    │ file:///var/folders/vp/z7yl1cwd3jv_scvfktrw_pgnfvwztc/T/tmp-24247y7xWy69C1ctw.zip │
└────────────┴───────────────────────────────────────────────────────────────────────────────────┘
```

さらに実行もできた

```
$ functions call helloWorld
ExecutionId: c36740fa-8a16-441f-89a6-35cc96bd3555
Result: Hello, World!
```

んーGoでは利用できないのかな・・・
もし詳しい方いらっしゃいましたら教えてくださいmm


# さらに注意点
>The Emulator only supports Node v6.x.x. It does not support Node v8.x.x or Python.

とあるように、Nodeの6系しかサポートしていない。
nodebrewとかでバージョンを切り替えられるようにしておくと便利

※いつもyarnを使っているのでyarnでinstallしようとしたら、
バージョン周りのエラーが出た。
調べるのが面倒だったのでnpmで入れた。

さらに、v6.11.0がインストール済みだったのでそれを利用してインストールしたら、
インストール自体は完了したものの、 `functions start` を実行した際にエラー？がでた。

```
$ functions start
Node.js v6.11.5 or greater is required to run the Emulator!
```

しかもバージョンを変えると `functions` のパスが通ってなかった。
なんてこった