목록Programing (20)
Study Memory Work
func main() { var wg sync.WaitGroup go watchNamespaces() wg.Add(1) wg.Wait() } 이 코드는 sync.WaitGroup을 사용하여 고루틴들이 작업을 완료할 때까지 기다리는 방법을 보여줍니다. sync.WaitGroup은 고루틴들이 완료될 때까지 기다리는 데 사용됩니다. 이는 병렬로 실행되는 고루틴들의 작업이 모두 끝날 때까지 메인 고루틴이 기다리도록 도와줍니다. wg.Add(1)은 WaitGroup에 1을 추가합니다. 이는 기다려야 하는 고루틴의 수를 나타냅니다. 여기서는 주로 메인 고루틴이 대기해야 하므로 1을 추가합니다. wg.Wait()은 WaitGroup이 0이 될 때까지 대기합니다. 현재 WaitGroup의 값이 0이 아니므로 이 코드는..
func packageName() string { pc, _, _, _ := runtime.Caller(1) parts := strings.Split(runtime.FuncForPC(pc).Name(), ".") pl := len(parts) pkage := "" if parts[pl-2][0] == '(' { pkage = strings.Join(parts[0:pl-2], ".") } else { pkage = strings.Join(parts[0:pl-1], ".") } packageNames := strings.Split(pkage, "/") config.Cfg.AddressInfo.Host = packageNames[0] return packageNames[0] }
git에서 go 프로젝트를 받으면 go.mod파일 및 라이브러리가 같이 clone되지 않기 때문에 import문 포함 많은 소스 코드에 오류가 난다. 그래서 처음 go 프로젝트를 clone하고 나면 go.mod파일을 생성하고 필요한 라이브러리를 다운받는 등의 작업이 필요하다. go module관련 명령어 go mod init {project-name} : mod 초기화 및 go.mod 파일 생성 go get [module-name] : 모듈(라이브러리) 설치 go mod tidy : 사용되지 않는 의존성 삭제, import(사용중)되어 있지만 의존성에 추가되지 않는 모듈을 go.mod파일에 추가해준다. go mod vendor Module을 이용하면 module 들을 project 밑에 저장하지 않고, ..
gocron 정해진 시간, 날짜 등등에 반복적으로 원하는 함수를 실행하도록 하는 라이브러리. gocron package github.com/go-co-op/gocron, github.com/jasonlvhit/gocron 두 package 차이 github.com/go-co-op/gocron은 더 많은 기능을 제공하는 오픈소스 스케줄러 라이브러리이며, 다양한 스케줄링 기능을 제공한다. 반면 github.com/jasonlvhit/gocron은 time.Ticker 기반의 더 단순한 스케줄러로, go 기본 패키지인 time과 유사한 인터페이스를 가지고 있다. 이 라이브러리는 더 적은 기능을 제공하지만, 가볍고 간단하게 사용할 수 있다. 두 라이브러리의 선택은 프로젝트의 요구사항과 개발자의 선호도에 따라 결..
func main() { ch1 := make(chan int) ch2 := make(chan string) go func() { for { // 채널이 닫힐 때 까지 반복 ch1 2023-03-06 13:53:19.399308 +0900 KST m=+0.000562209 Work1 : Start ---> 2023-03-06 13:53:19.399313 +0900 KST m=+0.000567376 Work1 : End ---> 2023-03-06 13:53:20.400448 +0900 KST m=+1.001706418 Work2 : End ---> 2023-03-06 13:53:20.400424 +0900 KST m=+1.001682626 Main : End ---> 2023-03-06 13:53:20...
멀티코어 사용하기 runtime.GOMAXPROCS(runtime.NumCPU()) // 현 시스템의 CPU 코어 갯수를 반환하여 runtime 설정 fmt.Println("Current System CPU : ", runtime.GOMAXPROCS(0)) // runtime.GOMAXPROCS(0) --> 0을 파라미터로 넣으면 위에서 세팅한 값을 출력해줌 예제) package main import ( "fmt" "math/rand" "runtime" "time" ) func exe(name int) { r := rand.Intn(100) fmt.Println(name, " start : ", time.Now()) for i := 0; i >..