Karthik G R
Karthik G R

Reputation: 1077

Constant Parameter in golang function

I am new to the golang. Is it possible to mark a parameter as constant in function ? So that the parameter is not modified accidentally.

Upvotes: 42

Views: 30446

Answers (4)

Highdeger
Highdeger

Reputation: 31

A constant can be defined in the scope where the function has been defined.

const varName varType
func myFunction() {
    ...
}

Parameters of a function cannot be constant because it have to be a variable to be changeable inside the function. If a function parameter was constant, we needed to put its value in a variable to do operations on it.

Upvotes: 0

Dmytro
Dmytro

Reputation: 432

There's still a handy application to the const parameter passed by value: you can't unintentionally change the initial value.

Consider following code:

func Generate(count int) (value []byte) {
   value = make([]byte, count)
   for i:=0; i<count; count++ {
       value[i] = byte(i) // just for an example
   }
   return
}

This is a valid Go code, no warning or errors during the compilation. Such kind of typo might be painful to track.

Upvotes: 4

rob74
rob74

Reputation: 5258

No, this is currently not possible. There are several cases to distinguish:

  • When passing a parameter "normally", i.e. by value, you don't have to worry about modifying it, since these parameters behave like local variables, so you can modify them inside the function, but your changes won't be visible outside the function. But, there is an exception to this rule...
  • ...some Go types (e.g. pointers, slices, channels, maps) are reference types, which means changes to them will be visible outside of the function. Some details are given here.
  • You can pass pointers (e.g., to structs) as parameters, in which case changes will be visible outside the function. If this is not intended, currently there is nothing you can do about it. So if you are passing pointers to avoid copying large structs, it is best to use this sparingly - remember, "Premature optimization is the root of all evil". Some hints are given in the Go FAQ here (it refers to method receivers, but it also applies to parameters).

Upvotes: 34

Zippo
Zippo

Reputation: 16440

No.

You can declare a constant inside a function body, but not as a parameter.

In Go, constants are created in compile time and can never change, while function parameters must change with each call at run time.

Upvotes: 8

Related Questions