Slice is a variable-length sequence which stores elements of a similar type, you are not allowed to store different type of elements in the same slice. It is just like an array having an index value and length, but the size of the slice is resized they are not in fixed-size just like an array. In Go language, you are allowed to pass a slice to a function, means the function gets the copy of the slice.
The slice is passed by value to a function along with the slice capacity, length, and the pointer of the slice is always pointing to the underlying array. So, if we made some change in the slice which is passed to the function by value will reflect in the slice present outside the function. Let us discuss this concept with the help of an example:
Initial slice: [C# Python C Perl] Modified slice: [C# Python Java Perl] Final slice: [C# Python Java Perl]
Explanation: In the above example, we have a slice named as slc. This slice is passed in the myfun() function. As we know that the slice pointer always points to the same reference even if they passed in a function. So, when we change the value C to Java present at index value 2. This change reflects the slice present outside the function too, so the final slice after modification is [C# Python Java perl].
Initial slice: [C# Python C Perl] Modified slice: [C# Python C Perl Java] Final slice: [C# Python C Perl]