github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/iox/close.go (about)

     1  package iox
     2  
     3  import (
     4  	"io"
     5  	"log"
     6  )
     7  
     8  // Close closes the io.Closer and log print if error occurs.
     9  func Close(cc ...io.Closer) {
    10  	for _, c := range cc {
    11  		if c == nil {
    12  			continue
    13  		}
    14  
    15  		if err := c.Close(); err != nil {
    16  			log.Printf("close failed: %v", err)
    17  		}
    18  	}
    19  }
    20  
    21  // CloseAny closes any and log print if error occurs.
    22  func CloseAny(cc ...interface{}) {
    23  	for _, c := range cc {
    24  		if c == nil {
    25  			continue
    26  		}
    27  
    28  		if cl, ok := c.(io.Closer); ok {
    29  			if err := cl.Close(); err != nil {
    30  				log.Printf("close failed: %v", err)
    31  			}
    32  			continue
    33  		}
    34  
    35  		if cl, ok := c.(interface{ Close() }); ok {
    36  			cl.Close()
    37  			continue
    38  		}
    39  	}
    40  }