Surveys no Golang e como usar

Olá pessoal, tudo bem? Eu sou Henrique e vou apresentar-lhes o package Survey

Features e Exemplos

Irei usar os exemplos da própia página do AlecAivazis pois não posso testar exemplos própios

Esse package permite você criar varios tipos de questões. Vamos conferir!

Grupos de questões

Esse package permite você agrupar varias questões em um grupo e fazelas em sequência sem precisar de chamar varias vezes o survey.AskOne

Question

package main
import (
    "fmt"
    "github.com/AlecAivazis/survey/v2"
)
// the questions to ask
var qs = []*survey.Question{
    {
        Name:     "name",
        Prompt:   &survey.Input{Message: "What is your name?"},
        Validate: survey.Required,
        Transform: survey.Title,
    },
    {
        Name: "color",
        Prompt: &survey.Select{
            Message: "Choose a color:",
            Options: []string{"red", "blue", "green"},
            Default: "red",
        },
    },
    {
        Name: "age",
        Prompt:   &survey.Input{Message: "How old are you?"},
    },
}
func main() {
    // the answers will be written to this struct
    answers := struct {
        Name          string                  // survey will match the question and field names
        FavoriteColor string `survey:"color"` // or you can tag fields to match a specific name
        Age           int                     // if the types don't match, survey will convert it
    }{}
    // perform the questions
    err := survey.Ask(qs, &answers)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    fmt.Printf("%s chose %s.", answers.Name, answers.FavoriteColor)
}

Diversos tipos de questão

Vocês pode usar e abusar de vários tipos de questão para melhorar a experiência!

Input

O Input é uma questão simples que usa string como valor de retorno.

Input

name := ""
prompt := &survey.Input{
    Message: "ping",
}
survey.AskOne(prompt, &name)

Multiline

O Multiline é uma questão de multiplas linhas e tambem usa string como valor de retorno

Multiline

text := ""
prompt := &survey.Multiline{
    Message: "ping",
}
survey.AskOne(prompt, &text)

Password

O Password é como o Input, porém, ele não mostra o que é digitado e usa string como valor de retorno

Password

password := ""
prompt := &survey.Password{
    Message: "Please type your password",
}
survey.AskOne(prompt, &password)

Confirm

O Confirm é uma questão de confirmação e usa bool como valor de retorno

Confirm

name := false
prompt := &survey.Confirm{
    Message: "Do you like pie?",
}
survey.AskOne(prompt, &name)

Select

O Select é uma questão de seleção, essa seleção é feita em um array que é dado como parametro e usa string como valor de retorno

Select

color := ""
prompt := &survey.Select{
    Message: "Choose a color:",
    Options: []string{"red", "blue", "green"},
}
survey.AskOne(prompt, &color)

Multiselect

O Multiselect é uma questão de multipla seleção e as opções são dadas por um parâmetro que recebe um array e usa array como valor de retorno

Multiselect

days := []string{}
prompt := &survey.MultiSelect{
    Message: "What days do you prefer:",
    Options: []string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"},
}
survey.AskOne(prompt, &days)

Editor

O Editor abre o editor em $VISUAL ou $EDITOR e cria um arquivo temporário e quando o usuário sai do editor, uma string é retornada com o valor do que foi digitado no editor de texto, caso não fora definido o editor, ele abrirá o Bloco de notas no Windows e o Vim no Linux e Mac

prompt := &survey.Editor{
    Message: "Shell code snippet",
    FileName: "*.sh",
}
survey.AskOne(prompt, &content)

Sensacional Henrique, eu sou apaixonado por interfaces de linha de comando. Fica como desafio implementar um client do TabNews em Golang, tudo pelo terminal, e que por trás fica usando as APIs 🤝 imagina que massa 😍

Desafio aceito Filipe, vou postando conforme vou avançando