Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Go Lang #8

Open
babbayo opened this issue Jan 29, 2019 · 7 comments
Open

Go Lang #8

babbayo opened this issue Jan 29, 2019 · 7 comments

Comments

@babbayo
Copy link
Owner

babbayo commented Jan 29, 2019

Go는 GoRoutine 이라는 비동기 매커니즘을 제공한다. Erlang 에서 영향을 받은 것으로 각각의 고류틴은 병렬로 동작하여 메시지 채널을 통해 값을 주고 받는다. 고루틴을 사용하면 이벤트 처리, 병렬 프로그래밍이 간단해진다.

처음시작할때 읽어보면 좋을듯
https://1ambda.github.io/golang/golang-tutorial/

치트시트
https://github.com/a8m/go-lang-cheat-sheet#basic-syntax

GC 에 대해
https://engineering.linecorp.com/ko/blog/go-gc/

외워두면 편한 명령어들

go get .../.
# go get 이 안먹혀서 하나씩 package 설치
go get "github.com/cridenour/go-postgis"

./configure
make
make install

C관련 라이브러리가 안먹힐때

확인확인!!!
export C_INCLUDE_PATH=/usr/local/include

golang 괜찮은 라이브러리 모음집
https://github.com/avelino/awesome-go#database

괜찮은 블로그
https://jaehue.github.io/post/how-to-use-golang-context/

@babbayo
Copy link
Owner Author

babbayo commented Feb 6, 2019

Go lang 툴

비주얼 스튜디오 코드 튜토리얼
https://code.visualstudio.com/docs/languages/go

비주얼 스튜디오 코드 단축키
https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf

⌘P 파일찾기
⌘F 파일내찾기
⌘D 같은거 찾기

⇧⌘E 왼쪽 사이드바 로
⇧⌘F 왼쪽 파인더바 로
⇧⌘D 왼쪽 디버깅바 로 

⇧⌘U 아래 사이드바로
⌘B 왼쪽 사이드바 보일지말지

F5 실행
F12 해당 메서드/객체 안으로 들어가기 (Cmd + 클릭)
ALT F12 명세
SHIFT F12 사용처 확인
F2 이름바꾸기
CMD+SHIFT + P 커멘트 팔레트 : Go: test at cursor

/usr/local/go/bin/go test -timeout 30s -run ^(TestGetRoutes)$

@babbayo
Copy link
Owner Author

babbayo commented Feb 6, 2019

Go lang 하면서 경험한 것들

[배경] Close 중에 패닉상태에 빠질껄 염려해서 에러 핸들링 하라는 warning 이 뜸
[문서] https://www.joeshaw.org/dont-defer-close-on-writable-files/

I think it’s safe to ignore an error from Close()

close 에대해 에러 처리할 필요 없다는 것 같다.


[배경] library 가 설치시 아래 오류가 뜬다.

1.9 부터 지원하는 메서드가 있었음
→ go get golang.org/x/lint/golint
# golang.org/x/tools/go/internal/gcimporter
../../../go/src/golang.org/x/tools/go/internal/gcimporter/bexport.go:212: obj.IsAlias undefined (type *types.TypeName has no field or method IsAlias)

[문서] golang/go#28291
1.9 부터 지원하는 메서드가 있었음

go version 
# go1.8.1 darwin/amd64 버전 업데이트가 필요했다! 

[배경] port 만 알고 있는 프로세스를 죽이고 싶다.

→ netstat -vanp tcp | grep 3333
tcp46      0      0  *.3333                 *.*                    LISTEN      131072 131072  61260      0

→ ps -ef | grep 61260
→ kill 61260

@babbayo
Copy link
Owner Author

babbayo commented Feb 10, 2019

자바에는 없는 포인터!

https://flaviocopes.com/golang-methods-receivers/

func (t *Type) Method() {} //pointer receiver
func (t Type) Method() {} //value receiver

언제 포인터 리시버를 써야할까요?

[필드값을 바꾸고 싶을때] 리시버의 상태값을 바꾸고 싶을때 써요! 값 리시버는 copy of value 이기 때문에 값을 바꿀수가 없어요
[최적화] 메서드를 정의한 struct 가 너무 크면 copy 하는데 비용이 커요

언제 값 리시버를 써야할까요?

리시버의 상태값을 바꾸고 싶지 않을때 - 값 리시버는 동시성에서 안정적이죠

언제 Tadeoff 한가요?

일관성을 위해 대체로 포인터 리시버를 권장!

@babbayo
Copy link
Owner Author

babbayo commented Feb 10, 2019

Go 도 코드 깔끔하게 짜고 싶다 ㅠㅠ
https://medium.com/golangspec/interfaces-in-go-part-i-4ae53a97479c

@babbayo
Copy link
Owner Author

babbayo commented Feb 11, 2019

embedding ("상속" 처럼 사용하고 "조합"해서 관리하는 느낌)
https://travix.io/type-embedding-in-go-ba40dd4264df

@babbayo
Copy link
Owner Author

babbayo commented Feb 17, 2019

Go support concurrency

참고 자료 : https://blog.golang.org/advanced-go-concurrency-patterns
라이브러리가 아닌 언어에서 동시성을 지원해줘요.

일단 동시성은 병렬성이랑 동의어가 아니에요.
하나의 프로세서만 갖고 있는 경우, 동시성은 유지될수 있겠지만 병렬성이 될 순 없어요.
반면에 동시성 프로그래밍은 멀티프로세서에서 병렬로 효율적으로 돌아갈 수 있어요.

[다른 언어들이랑 차이]
모델들이 동등하지만 다양한 것들을 표현한다.
erlang : writing to a file by name VS go : writing to a file descriptor

@babbayo
Copy link
Owner Author

babbayo commented Mar 10, 2019

Go Context

왜 필요한걸까?
자원을 효율적으로 사용하기 위해!
예를 들어 사용자가 요청을 철회 했을때, DB 작업이 오래 지속되고 있는걸 하지 않고 그냥 같이 철회 해버리고 싶을때가 있음.
https://www.sohamkamani.com/blog/golang/2018-06-17-golang-using-context-cancellation/
https://jaehue.github.io/post/how-to-use-golang-context/
https://blog.golang.org/context
https://mingrammer.com/translation-avoiding-memory-leak-in-golang-api/

주의점 - 모든 context 는 한번만 cancel 가능

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant