Skip to content

Instantly share code, notes, and snippets.

@duffney
Created April 25, 2022 21:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save duffney/c0d8c4b59306a30ba3f0adef28d2d49d to your computer and use it in GitHub Desktop.
Save duffney/c0d8c4b59306a30ba3f0adef28d2d49d to your computer and use it in GitHub Desktop.
Using the flags package in Go to create sub-commands
package subcommands
import (
"flag"
"fmt"
"os"
)
func main() {
uploadCmd := flag.NewFlagSet("upload", flag.ExitOnError)
uploadPath := uploadCmd.String("path", "", "path to file")
uploadContainerName := uploadCmd.String("container", "", "name of azure storage container")
uploadBlobName := uploadCmd.String("blob", "", "name of azure blob")
downloadCmd := flag.NewFlagSet("download", flag.ExitOnError)
downloadBlobName := downloadCmd.String("name", "", "name of azure blob to download")
downloadContainerName := downloadCmd.String("container", "", "name of azure storage container")
downloadFile := downloadCmd.String("file", "", "destination path for file")
listCmd := flag.NewFlagSet("list", flag.ContinueOnError)
listContainerName := listCmd.String("container", "", "name of azure storage container")
deleteCmd := flag.NewFlagSet("delete", flag.ExitOnError)
deleteBlobName := deleteCmd.String("name", "", "name of azure blob to delete")
deleteContainerName := deleteCmd.String("container", "", "name of azure storage container")
if len(os.Args) < 2 {
fmt.Println("expected a subcommand")
os.Exit(1)
}
switch os.Args[1] {
case "upload":
uploadCmd.Parse(os.Args[2:])
// call uploadFunc
fmt.Println(" path:", *uploadPath)
fmt.Println(" container:", *uploadContainerName)
fmt.Println(" blob:", *uploadBlobName)
case "download":
downloadCmd.Parse(os.Args[2:])
// call downloadFunc
fmt.Println(" name:", *downloadBlobName)
fmt.Println(" container:", *downloadContainerName)
fmt.Println(" file:", *downloadFile)
case "list":
listCmd.Parse(os.Args[2:])
//call listFunc
fmt.Println(" container:", *listContainerName)
case "delete":
deleteCmd.Parse(os.Args[2:])
//call deleteFunc
fmt.Println(" name:", *deleteBlobName)
fmt.Println(" container:", &deleteContainerName)
default:
fmt.Println("expected 'upload' subcommand")
os.Exit(1)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment