package main
|
|
|
|
import "fmt"
|
|
|
|
func linked() (int, int, int) {
|
|
|
|
s1 := []int{1, 2, 3, 4, 5}
|
|
s2 := s1
|
|
s3 := s1[:]
|
|
s1[3] = 99
|
|
return s1[3], s2[3], s3[3]
|
|
|
|
}
|
|
|
|
func noLink() (int, int) {
|
|
|
|
s1 := []int{1, 2, 3, 4, 5}
|
|
s2 := s1
|
|
s1 = append(s1, 6)
|
|
s1[3] = 99
|
|
return s1[3], s2[3]
|
|
|
|
}
|
|
|
|
func capLinked() (int, int) {
|
|
|
|
s1 := make([]int, 5, 10)
|
|
s1[0], s1[1], s1[2], s1[3], s1[4] = 1, 2, 3, 4, 5
|
|
s2 := s1
|
|
s1 = append(s1, 6)
|
|
s1[3] = 99
|
|
return s1[3], s2[3]
|
|
|
|
}
|
|
|
|
func capNoLink() (int, int) {
|
|
|
|
s1 := make([]int, 5, 10)
|
|
s1[0], s1[1], s1[2], s1[3], s1[4] = 1, 2, 3, 4, 5
|
|
s2 := s1
|
|
s1 = append(s1, []int{10: 11}...)
|
|
s1[3] = 99
|
|
return s1[3], s2[3]
|
|
|
|
}
|
|
|
|
func copyNoLink() (int, int, int) {
|
|
|
|
s1 := []int{1, 2, 3, 4, 5}
|
|
s2 := make([]int, len(s1))
|
|
copied := copy(s2, s1)
|
|
s1[3] = 99
|
|
return s1[3], s2[3], copied
|
|
|
|
}
|
|
|
|
func appendNoLink() (int, int) {
|
|
|
|
s1 := []int{1, 2, 3, 4, 5}
|
|
s2 := append([]int{}, s1...)
|
|
s1[3] = 99
|
|
return s1[3], s2[3]
|
|
|
|
}
|
|
|
|
func main() {
|
|
|
|
l1, l2, l3 := linked()
|
|
fmt.Println("Linked: ", l1, l2, l3)
|
|
nl1, nl2 := noLink()
|
|
fmt.Println("No Link: ", nl1, nl2)
|
|
cl1, cl2 := capLinked()
|
|
fmt.Println("Cap Linked: ", cl1, cl2)
|
|
cn1, cn2 := capNoLink()
|
|
fmt.Println("Cap no Link: ", cn1, cn2)
|
|
copy1, copy2, copied := copyNoLink()
|
|
fmt.Print("Copy No Link: ", copy1, copy2)
|
|
fmt.Printf(" (Number of elements copied: %v\n", copied)
|
|
a1, a2 := appendNoLink()
|
|
fmt.Println("Append No Link: ", a1, a2)
|
|
|
|
}
|