github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/chooser/shuffle_chooser.go (about) 1 package chooser 2 3 import ( 4 "context" 5 "math/rand" 6 "net" 7 ) 8 9 type shuffleChooser struct { 10 chooser Chooser 11 } 12 13 // NewShuffleChooser 创建随机混淆选择器 14 func NewShuffleChooser(chooser Chooser) Chooser { 15 return &shuffleChooser{chooser: chooser} 16 } 17 18 func (chooser *shuffleChooser) Choose(ctx context.Context, ips []net.IP, options *ChooseOptions) []net.IP { 19 chosen_ips := chooser.chooser.Choose(ctx, ips, options) 20 rand.Shuffle(len(chosen_ips), func(i, j int) { 21 chosen_ips[i], chosen_ips[j] = chosen_ips[j], chosen_ips[i] 22 }) 23 return chosen_ips 24 } 25 26 func (chooser *shuffleChooser) FeedbackGood(ctx context.Context, ips []net.IP, options *FeedbackOptions) { 27 chooser.chooser.FeedbackGood(ctx, ips, options) 28 } 29 30 func (chooser *shuffleChooser) FeedbackBad(ctx context.Context, ips []net.IP, options *FeedbackOptions) { 31 chooser.chooser.FeedbackBad(ctx, ips, options) 32 }