TIL (2022.05.02)

ay.zip·2022년 5월 2일
0

TIL

목록 보기
35/47
post-thumbnail

GO를 배우고 있습니다.

⤵️ 기록
https://github.com/ayleeee/learningGo

⤵️ 노마드코더
https://nomadcoders.co/go-for-beginners

⤵️ golang.site
http://golang.site/go/article/21-Go-%EB%A3%A8%ED%8B%B4-goroutine


Go루틴

  • "go" 키워드를 사용하여 함수 호출 -> 여러 코드를 동시에 실행
  • goroutine 은 실행 순서가 일정하지 않으므로 프로그램 실행시 마다 다른 출력 결과
package main

import (
	"fmt"
	"time"
)

func counter(num int) {
	for i := 0; i < num; i++ {
		time.Sleep(time.Second)
		fmt.Println(i)
	}
}
func main() {
	counter(5)
	counter(5)
}

이렇게 한다면 결과물은?
0
1
2
3
4
0
1
2
3
4
로 하나씩 나올 것이다.
하지만

package main

import (
	"fmt"
	"time"
)

func counter(num int) {
	for i := 0; i < num; i++ {
		time.Sleep(time.Second)
		fmt.Println(i)
	}
}
func main() {
	go counter(5)
	counter(5)
}

이렇게하면?
동시에 출력된다.
0
0
1
1
...
이런식으로.

package main

import (
	"fmt"
	"time"
)

func counter(num int) {
	for i := 0; i < num; i++ {
		time.Sleep(time.Second)
		fmt.Println(i)
	}
}
func main() {
	go counter(5)
	go counter(5)
}

두 함수 모두에 go를 붙인다면?
2가지의 go 루틴이 끝나기 전에 main이 끝나므로 종료가 된다.

Channel

channel은 gorouinte사이에서 데이터를 주고받는 기능을 수행한다.
채널은 make()로 만들 수 있다.
result :=make(chan something)

package main

import (
	"fmt"
)

func welcomeName(name string, c chan<- string) {
	fmt.Println("This is ", name)
	c <- "hello, " + name
}
func main() {
	c := make(chan string)
	go welcomeName("aylee", c)
	fmt.Println(<-c)
}

0개의 댓글

관련 채용 정보