func NewGenerator(secrets []string, opts ...Option) (*Generator, error) {
	src, err := csprng.New(secrets)
	if err != nil {
		return nil, err
	}

	res := &Generator{
		letters:    Letters,
		digits:     Digits,
		symbols:    Symbols,
		randomizer: rand.New(src),
	}

	// Loop through each option
	for _, opt := range opts {
		// Call the option giving the instantiated
		// *Generator as the argument
		opt(res)
	}

	return res, nil
}
// NewGenerator creates a new Generator from the specified configuration. If no
// input is given, all the default values are used. This function is safe for
// concurrent use.
NewGenerator creates a new Generator from the specified configuration. If no
input is given, all the default values are used. This function is safe for
concurrent use.
// NewGenerator creates a new Generator from the specified configuration . If no // input is given all the default values are used . This function is safe for // concurrent use .
func NewGenerator(secrets []string, opts ...Option) (*Generator, error) {
	src, err := csprng.New(secrets)
	if err != nil {
		return nil, err
	}
	res := &Generator{
		letters:    Letters,
		digits:     Digits,
		symbols:    Symbols,
		randomizer: rand.New(src),
	}
	for _, opt := range opts {
		opt(res)
	}
	return res, nil
}
func NewGenerator ( secrets [ ] string , opts ... Option ) ( * Generator , error ) { src , err := csprng . New ( secrets ) if err != nil { return nil , err } res := & Generator { letters : Letters , digits : Digits , symbols : Symbols , randomizer : rand . New ( src ) , } for _ , opt := range opts { opt ( res ) } return res , nil }
NewGenerator creates a new Generator from the specified configuration.
NewGenerator creates a new Generator from the specified configuration .
// Loop through each option // Call the option giving the instantiated // *Generator as the argument