How to create a function with an optional parameter in Go

4 Answers

0 votes
// In Go, every parameter is required.  
// You can simulate optional parameters depending on what you need.

package main

import "fmt"

// Default Values Using a Wrapper Function (Most Common)
// You define an internal function with all parameters

func greet(name string) {
    fmt.Println("Hello,", name)
}

func greetDefault() {
    greet("Guest")
}

func main() {
    greet("Nebula")
    greetDefault()
}



/*
run:

Hello, Nebula
Hello, Guest

*/


 



answered 3 hours ago by avibootz
0 votes
// In Go, every parameter is required.  
// You can simulate optional parameters depending on what you need.

package main

import "fmt"

// Optional Parameters Using Variadic Arguments (...type)
// when you want zero or more extra values.

func greet(names ...string) {
    if len(names) > 0 {
        fmt.Println("Hello,", names[0])
    } else {
        fmt.Println("Hello, Guest")
    }
}

func main() {
    greet()          
    greet("Nebula")  
}



/*
run:

Hello, Nebula
Hello, Guest

*/


 



answered 3 hours ago by avibootz
edited 3 hours ago by avibootz
0 votes
// In Go Every parameter in Go is required.  
// You can simulate optional parameters depending on what you need.

package main

import (
    "fmt"
    "strings"
)

// Optional Parameters Using a Struct 

type Options struct {
    Name  string
    Upper bool
}

func greet(opts Options) {
    name := opts.Name
    if name == "" {
        name = "Guest"
    }
    if opts.Upper {
        name = strings.ToUpper(name)
    }
    fmt.Println("Hello,", name)
}

func main() {
    greet(Options{})                        
    greet(Options{Name: "Nebula"})           
    greet(Options{Name: "Quantum", Upper: true}) 
}



/*
run:

Hello, Guest
Hello, Nebula
Hello, QUANTUM

*/


 



answered 3 hours ago by avibootz
0 votes
// In Go, every parameter is required.  
// You can simulate optional parameters depending on what you need.

package main

import (
    "fmt"
)

// Optional Parameters Using Functional Options
type config struct {
    name string
}

type Option func(*config)

func WithName(n string) Option {
    return func(c *config) {
        c.name = n
    }
}

func greet(opts ...Option) {
    cfg := config{name: "Guest"}
    for _, opt := range opts {
        opt(&cfg)
    }
    fmt.Println("Hello,", cfg.name)
}

func main() {
    greet()                 
    greet(WithName("Ani"))  
}



/*
run:

Hello, Guest
Hello, Ani

*/


 



answered 3 hours ago by avibootz
...