行け、サブ機能に延期を置くことは可能ですか

xpt:

deferサブ機能を入れることは可能ですか?

つまりtest1()https://play.golang.org/p/evabhcjvNsのfuncの12〜16行目(以下に同封)

それらをサブ関数に入れる可能性はありますか?私が試したものと同じですtest2()(ただし、その動作はとは異なりますtest1())。

私が尋ねている理由は、funcの12〜16行目test1()で、実際のコードは永続データから変数を復元し、完了defer時にそれを保存するために使用するためtest1()です。ただし、全体の復元/保存が不要な場合もあるので、より良い制御方法を考えています。

ありがとう

package main

import "log"

func main() {
    test1()
    log.Printf("==== \n")
    test2()
}

func test1() {
    r, err := Open("a")
    if err != nil {
        log.Fatalf("error opening 'a'\n")
    }
    defer r.Close()

    r.Use()
}

func test2() {
    r := subc()
    r.Use()
}

func subc() *Resource {
    r, err := Open("a")
    if err != nil {
        log.Fatalf("error opening 'a'\n")
    }
    defer r.Close()
    return r
}

type Resource struct {
    name string
}

func Open(name string) (*Resource, error) {
    log.Printf("opening %s\n", name)
    return &Resource{name}, nil
}

func (r *Resource) Use() error {
    log.Printf("using %s\n", r.name)
    return nil
}

func (r *Resource) Close() error {
    log.Printf("closing %s\n", r.name)
    return nil
}
Andy Schweig:

私はあなたが尋ねていることを理解していると思います。関数が呼び出し元の据え置きスタックに関数を配置できるかどうかを知りたいとします。その答えはノーです。これに対する1つの可能な解決策は、何かを延期したい関数がその関数を呼び出し元に返し、呼び出し元にを実行させることdeferです。例えば:

func test2() {
    r, cleanup := subc()
    defer cleanup()
    r.Use()
}

func subc() (*Resource, func()) {
    r, err := Open("a")
    if err != nil {
        log.Fatalf("error opening 'a'\n")
    }
    return r, func() { r.Close() }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

テストファイルをサブフォルダーに置くことは可能ですか

分類Dev

Markdownにタブパネルを置くことは可能ですか?

分類Dev

Ctrl + C信号をキャプチャしてクリーンアップ機能を「延期」して実行することは可能ですか?

分類Dev

EditTextPreferenceにリスナーを置くことは可能ですか?

分類Dev

Googleマップのマーカーにタイトルだけでなく、より多くの情報/機能を追加することは可能ですか?

分類Dev

延期されたコマンド実行をbash変数に保存することは可能ですか?

分類Dev

延期されたコマンド実行をbash変数に保存することは可能ですか?

分類Dev

タグ付け可能な友達APIのIDを友情の表示機能に使用することは可能ですか?

分類Dev

タグ付け可能な友達APIのIDを友情の表示機能に使用することは可能ですか?

分類Dev

機能のクリーンアップブロックを評価する直前に、Spock機能の実行を傍受することは可能ですか?

分類Dev

PiwikのDo-Not-Track機能を、グローバルではなくWebサイトごとに設定することは可能ですか?

分類Dev

1つのアプリサービスの下に多くのウェブアプリを置くことは可能ですか?

分類Dev

jQueryのロードを延期することは可能ですか?

分類Dev

Edge WebブラウザでChrome拡張機能を実行することは可能ですか?

分類Dev

JCMDにPIDではなくサービス名を付けることは可能ですか?

分類Dev

Intel x86 CPUに基づくAVDのHAMX機能を無効にすることは可能ですか?

分類Dev

JavaScriptの実行スタックの最後にコードを置くことは可能ですか?

分類Dev

実行可能jarはどこに置くべきですか?

分類Dev

サブシェルを使用せずにシェルコマンド置換を実行することは可能ですか?

分類Dev

Githubの要点マークダウンの中央にテーブルを置くことは可能ですか?

分類Dev

子ブロックの子を親の影の下に置くことは可能ですか?

分類Dev

64ビットUbuntuにJava 1.4を置くことは可能ですか?

分類Dev

水平バーの間に `plt.yticks`を置くことは可能ですか?

分類Dev

Windows 7でライブラリ機能を無効にすることは可能ですか?

分類Dev

YAMLで文字列置換を行うことは可能ですか?

分類Dev

vbaでサブまたは関数を1行に配置することは可能ですか?

分類Dev

文法nqp内でサブ文法を実行することは可能ですか?

分類Dev

文法nqp内でサブ文法を実行することは可能ですか?

分類Dev

PHPのメール機能にCSSを追加することは可能ですか?

Related 関連記事

  1. 1

    テストファイルをサブフォルダーに置くことは可能ですか

  2. 2

    Markdownにタブパネルを置くことは可能ですか?

  3. 3

    Ctrl + C信号をキャプチャしてクリーンアップ機能を「延期」して実行することは可能ですか?

  4. 4

    EditTextPreferenceにリスナーを置くことは可能ですか?

  5. 5

    Googleマップのマーカーにタイトルだけでなく、より多くの情報/機能を追加することは可能ですか?

  6. 6

    延期されたコマンド実行をbash変数に保存することは可能ですか?

  7. 7

    延期されたコマンド実行をbash変数に保存することは可能ですか?

  8. 8

    タグ付け可能な友達APIのIDを友情の表示機能に使用することは可能ですか?

  9. 9

    タグ付け可能な友達APIのIDを友情の表示機能に使用することは可能ですか?

  10. 10

    機能のクリーンアップブロックを評価する直前に、Spock機能の実行を傍受することは可能ですか?

  11. 11

    PiwikのDo-Not-Track機能を、グローバルではなくWebサイトごとに設定することは可能ですか?

  12. 12

    1つのアプリサービスの下に多くのウェブアプリを置くことは可能ですか?

  13. 13

    jQueryのロードを延期することは可能ですか?

  14. 14

    Edge WebブラウザでChrome拡張機能を実行することは可能ですか?

  15. 15

    JCMDにPIDではなくサービス名を付けることは可能ですか?

  16. 16

    Intel x86 CPUに基づくAVDのHAMX機能を無効にすることは可能ですか?

  17. 17

    JavaScriptの実行スタックの最後にコードを置くことは可能ですか?

  18. 18

    実行可能jarはどこに置くべきですか?

  19. 19

    サブシェルを使用せずにシェルコマンド置換を実行することは可能ですか?

  20. 20

    Githubの要点マークダウンの中央にテーブルを置くことは可能ですか?

  21. 21

    子ブロックの子を親の影の下に置くことは可能ですか?

  22. 22

    64ビットUbuntuにJava 1.4を置くことは可能ですか?

  23. 23

    水平バーの間に `plt.yticks`を置くことは可能ですか?

  24. 24

    Windows 7でライブラリ機能を無効にすることは可能ですか?

  25. 25

    YAMLで文字列置換を行うことは可能ですか?

  26. 26

    vbaでサブまたは関数を1行に配置することは可能ですか?

  27. 27

    文法nqp内でサブ文法を実行することは可能ですか?

  28. 28

    文法nqp内でサブ文法を実行することは可能ですか?

  29. 29

    PHPのメール機能にCSSを追加することは可能ですか?

ホットタグ

アーカイブ