Golang swap 2 variables

박재훈·2023년 3월 23일
0

GO

목록 보기
15/23
post-custom-banner
func Swap[T any](a, b *T) {
	*a, *b = *b, *a
}

func main() {
	a, b := 1, 2
	fmt.Println(a, b) // 1 2

	Swap(&a, &b)
	fmt.Println(a, b) // 2 1

	c, d := []int{1, 2, 3}, []int{4, 5, 6}
	fmt.Println(c, d) // [1 2 3] [4 5 6 ]

	Swap(&c, &d)
	fmt.Println(c, d) // [4 5 6] [1 2 3]

	e, f := &a, &b
	fmt.Println(*e, *f) // 2 1

	Swap(&e, &f)
	fmt.Println(*e, *f) // 1 2
}
ch1, ch2 := make(chan int), make(chan int)
go func() {
	for v1 := range ch1 {
		fmt.Println("v1", v1)
	}
}()
go func() {
	for v2 := range ch2 {
		fmt.Println("v2", v2)
	}
}()
go func() {
	for i := 0; ; i++ {
		ch1 <- i
		ch2 <- i * 10000
		time.Sleep(time.Second)
	}
}()

time.Sleep(time.Second * 5)
Swap(&ch1, &ch2)

// v1 0
// v2 0
// v2 10000
// v1 1
// v2 20000
// v1 2
// v2 30000
// v1 3
// v2 40000
// v1 4

// v1 50000
// v2 5
// v1 60000
// v2 6
// v1 70000
// v2 7
// v1 80000
// v2 8
// v1 90000
// v2 9
// v1 100000
// v2 10
profile
생각대로 되지 않을 때, 비로소 코딩은 재미있는 법.
post-custom-banner

0개의 댓글