Skip to content

Latest commit

 

History

History
79 lines (54 loc) · 1.29 KB

GO Value Types.md

File metadata and controls

79 lines (54 loc) · 1.29 KB
title notetype date
GO Value Types
feed
20-02-2022

When you pass an argument to a function in [[01 Inbox/Golang]], the function will behave differently depending on the type of the argument passed. Here we make a diffrerence between Value Types and [[GO Reference Types]]

With Value Types, go makes a copy of the value that you passed, and gives that copy to the function. This means that the function can't modify the original value of the variable you passed, as it's just getting a copy of the original value.

package main

import "fmt"

type person struct {
	firstName string
	lastName string
}

func main() {
	p := person{
		firstName: "Jane",
		lastName: "Doe",
	}

	rename(p, "John")

	fmt.Println(p.firstName) // "Jane"
}

func rename(p person, newName string) {
	p.firstName = newName
}

You can work around this mechanism by passing a pointer instead of the value:

package main

import "fmt"

type person struct {
	firstName string
	lastName string
}

func main() {
	p := person{
		firstName: "Jane",
		lastName: "Doe",
	}

	rename(&p, "John")

	fmt.Println(p.firstName) // "Jane"
}

func rename(p *person, newName string) {
	p.firstName = newName
}

Types that behave like this are:

  • int
  • float
  • string
  • bool
  • struct

Status: #💡