Skip to content

Instantly share code, notes, and snippets.

@huruji
Forked from albrow/confirm.go
Created June 29, 2021 17:14
Show Gist options
  • Select an option

  • Save huruji/6e74bcfd45980b1e0ff99d92ca826ad3 to your computer and use it in GitHub Desktop.

Select an option

Save huruji/6e74bcfd45980b1e0ff99d92ca826ad3 to your computer and use it in GitHub Desktop.

Revisions

  1. @albrow albrow revised this gist Jun 28, 2013. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion confirm.go
    Original file line number Diff line number Diff line change
    @@ -8,7 +8,8 @@ import (
    // askForConfirmation uses Scanln to parse user input. A user must type in "yes" or "no" and
    // then press enter. It has fuzzy matching, so "y", "Y", "yes", "YES", and "Yes" all count as
    // confirmations. If the input is not recognized, it will ask again. The function does not return
    // until it gets a valid response from the user.
    // until it gets a valid response from the user. Typically, you should use fmt to print out a question
    // before calling askForConfirmation. E.g. fmt.Println("WARNING: Are you sure? (yes/no)")
    func askForConfirmation() bool {
    var response string
    _, err := fmt.Scanln(&response)
  2. @albrow albrow revised this gist Jun 28, 2013. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions confirm.go
    Original file line number Diff line number Diff line change
    @@ -17,9 +17,9 @@ func askForConfirmation() bool {
    }
    okayResponses := []string{"y", "Y", "yes", "Yes", "YES"}
    nokayResponses := []string{"n", "N", "no", "No", "NO"}
    if ContainsString(okayResponses, response) {
    if containsString(okayResponses, response) {
    return true
    } else if ContainsString(nokayResponses, response) {
    } else if containsString(nokayResponses, response) {
    return false
    } else {
    fmt.Println("Please type yes or no and then press enter:")
    @@ -42,5 +42,5 @@ func posString(slice []string, element string) int {

    // containsString returns true iff slice contains element
    func containsString(slice []string, element string) bool {
    return !(PosString(slice, element) == -1)
    return !(posString(slice, element) == -1)
    }
  3. @albrow albrow created this gist Jun 28, 2013.
    46 changes: 46 additions & 0 deletions confirm.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,46 @@
    import (
    "fmt"
    "log"
    "os"
    "sort"
    )

    // askForConfirmation uses Scanln to parse user input. A user must type in "yes" or "no" and
    // then press enter. It has fuzzy matching, so "y", "Y", "yes", "YES", and "Yes" all count as
    // confirmations. If the input is not recognized, it will ask again. The function does not return
    // until it gets a valid response from the user.
    func askForConfirmation() bool {
    var response string
    _, err := fmt.Scanln(&response)
    if err != nil {
    log.Fatal(err)
    }
    okayResponses := []string{"y", "Y", "yes", "Yes", "YES"}
    nokayResponses := []string{"n", "N", "no", "No", "NO"}
    if ContainsString(okayResponses, response) {
    return true
    } else if ContainsString(nokayResponses, response) {
    return false
    } else {
    fmt.Println("Please type yes or no and then press enter:")
    return askForConfirmation()
    }
    }

    // You might want to put the following two functions in a separate utility package.

    // posString returns the first index of element in slice.
    // If slice does not contain element, returns -1.
    func posString(slice []string, element string) int {
    for index, elem := range slice {
    if elem == element {
    return index
    }
    }
    return -1
    }

    // containsString returns true iff slice contains element
    func containsString(slice []string, element string) bool {
    return !(PosString(slice, element) == -1)
    }