Golang の io インターフェースには、NopCloser と呼ばれる独自の関数があります。これは、閉じる操作のない io.ReadCloser が必要な場合に、機能しない Close メソッドを提供するように設計されています。
ドキュメントによると、
NopCloser は、操作なしの ReadCloser を返します。提供された Reader r.
をラップする Close メソッド。io.ReadCloser を返す必要があるシナリオに遭遇した場合に、より多くのコンテキストを提供します。 Close() メソッドの可用性を確保しながら、NopCloser は便利なソリューションです。これにより、実際のクローズ機能を使用せずに ReadCloser を構築できます。
NopCloser の使用例を次に示します。
import ( "bytes" "io" "io/ioutil" ) // Marshals the data in interface i into a byte slice, using the Marhaller/Unmarshaller specified in mime. // The Marhaller/Unmarshaller must have been registered before using gorest.RegisterMarshaller func InterfaceToBytes(i interface{}, mime string) (io.ReadCloser, error) { v := reflect.ValueOf(i) if v.Kind() == reflect.Ptr { v = v.Elem() } switch v.Kind() { case reflect.Bool: x := v.Bool() if x { return ioutil.NopCloser(bytes.NewBuffer([]byte("true"))), nil } // ... continue with other cases } }
この例では、NopCloser はバイトをラップするために使用されます。バッファリングして io.ReadCloser として返します。 bytes.Buffer にはデフォルトで Close() メソッドがありませんが、返される io.ReadCloser は実際の終了アクションなしで Close() メソッドを提供します。
NopCloser を効果的に活用する方法を理解することで、特定のシナリオに対応して ReadClosers を構築できるようになります。 Go アプリケーションでカスタマイズされた終了動作を使用します。
以上がGolang の io/ioutil NopCloser を使用する必要があるのはいつ、なぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。