일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- JUCE라이브러리
- vim-go
- C++ gui 라이브러리
- OS
- tour of go
- c++ heap
- BOJ
- 코딩
- 운영체제
- Docker
- 자료구조
- 공룡책
- gui
- Nebula
- 연결리스트
- a tour of go
- 알고리즘
- 프로그래밍
- JUCE
- C++ gui
- JUCE library
- JUCE 튜토리얼
- go channel
- C++
- 백준
- 리듬게임
- C++ library
- go
- LOB
- C언어
- Today
- Total
CafeM0ca
[Go] A Tour of Go Exercise : Stringers 풀이 본문
stringer에 대해서 먼저 알아보자면
fmt 패키지에 정의된 인터페이스로 흔하게 사용한다.
Stringer는 특정 타입을 string으로 묘사할 수 있다. fmt 패키지를 보면 이 인터페이스가 값을 출력하는 것을 볼 수 있다
10번쨰줄을 보면 (p Person)을 receiver로 하는 메소드가 정의되어 있다.
return 할 때 fmt.Sprintf로 포멧을 지정해준다.
17번쨰줄에서 출력을 하게되면 사전에 지정한 포멧으로 출력된다.
Go를 쌩 처음한다면 어색할 수도 있는데(필자도 혼란스럽다) 비슷한게 뭐가 있나 생각해보니까 C++에서 오버로딩을 생각하면 이해가 쉽다.
Name과 Age를 멤버변수로 가진 Person 구조체가 있는데 이를 오버로딩 안하고 출력해주면 출력 형태를 어떻게 잡아야할지 몰라서 컴파일에러가 발생한다.
ostream을 오버로딩 해주면 구현한 내용대로 출력하면 되기 때문에 에러가 발생하지 않는다.
첫번째 출력은 연산자오버로딩, 두번째 출력은 Person을 출력하는 방법이다.
필자는 8번째~10번째 줄처럼 구현했다.
+ stringer가 printf에 어떤식으로 적용되는지 궁금해서 github의 go 코드를 보는데 이런 코드가 있더라.
Precision 아래에 개행이 하나 존재한다.
저게 왜 저렇게 되있는지, 그냥 컨벤션이 저런건지 궁금해서 다른데도 봤는데 컨벤션은 아니더라.
나중에 컨트리뷰팅이나 한번 해봐야겠다.
컨트리뷰팅 하려는데 절차가 꽤 복잡하더라..
+ 참고로 타입에 er이 붙으면 인터페이스를 의미하는 컨벤션이라고 한다.
'Programming > Go' 카테고리의 다른 글
[Go] Goroutine과 channel (0) | 2020.12.07 |
---|---|
[Go] A tour of Go exercise Reader, rot13Reader 풀이 (0) | 2020.12.06 |
[Go] Type assertion, Type switch (0) | 2020.12.04 |
[Go] Interface (0) | 2020.12.04 |
[Go] method, receiver (go 리시버) (0) | 2020.12.04 |