geth (이더리움 go client)를 분석 수정하려면, go언어 공부가 필요하다.
[go 언어]
- 설치: https://golang.org/dl/
- 편집: IntelliJ + go sdk plug-in 추천
- 환경변수: GOPATH - workspace 위치
GOROOT - go실행파일이 설치된 경로
$go env 로 환경변수 확인가능
- 학습사이트: REF
[c와 java/javascript 익숙자 기준 go언어의 차이]
변수Type (다양한 길이별로 지정이 가능하다)
- int int8~int64, uint uint8~uint64 uintptr, float32 float64 complex64 complex128
- rune: int32과 동일하며 유니코드 코드포인트에 사용
문자열 (java의 단점이던 멀티라인 문자열 지원)
- '원어퍼스트로피' 를 사용하면, 멀티라인 스트링이 되고, 그 안에 있는 \n등도 해석하지 않고 그대로 사용.
포인터 지원 (c처럼 &, * 를 통한 포인터 지원)
함수 (1st class함수)
- javascript처럼 함수를 파라미터로 넘길 수 있음
- javascript처럼 closure방식 함수 사용 가능
패키지 (java 처럼 pkg단위로 모듈관리)
- 디폴트 pkg 위치는 GOROOT/pkg 참조
- pkg는 init() 함수를 가질 수 있고, 임포트시에 _ 를 붙이면 임포트 안하고 init()만 호출한다.
defer / panic / recover
- defer는 java의 finally와 비슷하게 최종적으로 실행이 됨
- panic은 c의 exit같은 개념인데, defer함수들은 다 실행하면서 종료함. (좋아 보임)
- panic상태를 recover()릍 통해 회복도 가능