回答編集履歴

2

追記

2021/05/10 04:15

投稿

nobonobo
nobonobo

スコア3367

test CHANGED
@@ -6,4 +6,32 @@
6
6
 
7
7
 
8
8
 
9
- 関数間で密接に共有したいものがある場合は構造体のフィールドに共有したい変数を置いて関数はその構造体のメソッドとして実装します。
9
+ ~~関数間で密接に共有したいものがある場合は構造体のフィールドに共有したい変数を置いて関数はその構造体のメソッドとして実装します。~~これはHTTPハンドラでは不適切だったので忘れてください。
10
+
11
+
12
+
13
+ 質問にある状況を整理すると、
14
+
15
+ HandlerUserConfirm関数で得た値をHandlerConfirmDelete関数で参照できたとしても「不適切」です。
16
+
17
+
18
+
19
+ なぜなら、HandlerUserConfirm関数とHandlerConfirmDelete関数を呼び出したきっかけのHTTPクライアントが同一であるとは限らないからです。
20
+
21
+
22
+
23
+ こういう状況でHTTPハンドラで横断する方法はグローバル変数だとクライアント別の処理はできないので、「クッキーストレージまたはセッションストレージを使う」方法が一般的ですが、フロントの設計で回避するのが今時のやり方です(サーバーをステートレスに実装するとサーバーを負荷分散させやすい)。
24
+
25
+
26
+
27
+ つまり、フロントの設計で以下のパラメータを同じものにするというのがおすすめです。
28
+
29
+ - HandlerUserConfirmの時につけるパラメータ
30
+
31
+ - HandlerConfirmDeleteの時につけるパラメータ
32
+
33
+
34
+
35
+ 冗長に見えるかもしれませんが、HandlerConfirmDeleteでも同じ外部APIを呼んで同じ結果が得られるという前提であればHandlerUserConfirm内部で得られる値と同じものがHandlerConfirmDelete内部で得られるということになります。
36
+
37
+ もし、外部APIが一定の入力に対し同じ結果を得るようなものではないのであればその旨追記ください。

1

追記

2021/05/10 04:15

投稿

nobonobo
nobonobo

スコア3367

test CHANGED
@@ -3,3 +3,7 @@
3
3
  呼び出し先が構築した値が呼び出し元で必要なら呼び出し先の関数の戻り値に乗せるべきかと思います。
4
4
 
5
5
  トリッキーな値の共有は読みにくくなるのでお勧めしません。
6
+
7
+
8
+
9
+ 関数間で密接に共有したいものがある場合は構造体のフィールドに共有したい変数を置いて関数はその構造体のメソッドとして実装します。