반응형
Language/Go
[Go] 실행중인 프로세스에 대해 memory dump 파일을 남기고 GoLand로 분석하기
[Go] 실행중인 프로세스에 대해 memory dump 파일을 남기고 GoLand로 분석하기
2019.11.05Memory Dump 파일 남기기 - Linux 환경(Virtual Machine - CentOS7 기준) 1. gdb 설치(되어있다면 생략) yum install gdb 2. 대상이 되는 프로세스 추적 $ ps -ef | grep socket root 7896 18386 0 Nov04 ? 00:01:47 /game/server/socketServer/20191104_175539/dev_socket/dev_socket -ServerType=Dev root 29534 29485 0 16:34 pts/1 00:00:00 grep --color=auto socket 3. memory dump 남기기 $ gcore 7896 warning: File "/usr/lib/golang/src/runtime/runtim..
Go에서 자주 사용하는 reflect 구문 (Golang reflect)
Go에서 자주 사용하는 reflect 구문 (Golang reflect)
2019.06.21구조체 및 인터페이스 정의 type Animal interface{ Move(int) bool } type Cat struct { Name string `custom:"name"` Age int `custom:"age"` Child []string `custom:"child"` } func (c *Cat) Move(distance int) bool { fmt.Println("Cat Move ", distance) return true } type Dog struct{ Name string `custom:"name"` Age int `custom:"age"` Child []string `custom:"child"` } func (d *Dog) Move(distance int) bool { fmt.Print..
Go에서 실수하기 쉬운 케이스 - defer, panic, recover
Go에서 실수하기 쉬운 케이스 - defer, panic, recover
2019.04.242줄 요약 recover 는 defer함수에 의해 직접적으로 호출되면 안된다. panic을 중단시킬 함수의 depth가 n이라면 recover는 n+1 에서 호출되어야 한다. 착각하기 쉬운 케이스 다른 언어의 try-catch문과 비슷하게 go에서는 defer, panic, recover 패턴을 이용해서 발생하는 예외 상황을 제어 할 수 있다. package main import ( "fmt" ) func main() { defer a() panic("panic!") } func a() { r := recover() fmt.Println("recoverd: ", r) fmt.Println("a called") } recoverd: panic! a called Program exited. 만약 지연 호출 ..