Sobes.tech
Junior

Go slide task: what will the code with functions addNums and addDynams output?

sobes.tech AI

Answer from AI

In Go, slices are structures containing a pointer to an array, a length, and a capacity. When passing a slice to a function, a copy of this structure is passed, but it points to the same underlying array.

If the function addNums modifies the elements of the slice by index (for example, s[0] = s[0] + 1), these changes will be visible outside the function because the contents of the array are modified.

However, if the function addDynams modifies the slice itself, for example, by assigning a new slice or adding elements via append, these changes will not affect the original slice outside the function unless a new slice is returned or a pointer is passed.

Example:

func addNums(s []int) {
    for i := range s {
        s[i] += 1
    }
}

func addDynams(s []int) {
    s = append(s, 100) // adds an element, but this is a local copy of the slice
}

func main() {
    nums := []int{1, 2, 3}
    addNums(nums)
    fmt.Println(nums) // [2 3 4] - changes are visible

    addDynams(nums)
    fmt.Println(nums) // [2 3 4] - no changes, append did not modify the original slice
}

Thus, the code with addNums will output the modified slice, while addDynams will output the original slice without changes unless a new slice is returned or pointers are used.

Go slide task: what will the code with functions… - sobes.tech