2017-09-14 1 views
0

FPrintf를 래핑하는 기능을 작성하려고하지만 이상한 문자가 계속 출력됩니다.Go에서 FPrintf를 래핑하는 방법?

여기 아이디어 (I 입력쪽으로 출력을 테스트 할 수 있도록 이와 fprintf와의 사용) I 출력을 테스트 할 수있는 조건부 PRINTF을 가질 수있을 것이다

https://play.golang.org/p/yZgNnpovEa

재생기를이다. 이 문제를 해결할 방법이 있습니까?

나는 How to ignore extra fields for fmt.Sprintf을 보았지만 모든 대답은 사용자가 % s 만 기대한다고 가정하고 나의 경우에는 Printf만큼 유연 해지기를 원하며 다른 하나는 downvoted입니다.

이것은 단지 가능하지 않으며 누구나 합리적인 설명을 줄 수 있습니까?

+6

대답을 참조하면 링크 된 질문과 동일합니다, 당신은이'...'은'params' 조각을 확장 놓치고있어 . – JimB

+2

https://stackoverflow.com/questions/23723955/how-can-i-pass-a-slice-as-a-variadic-input – JimB

+0

와우 프로그래밍 학교로 돌아 가야합니다. 고맙습니다. Ofc 필자는 매개 변수를 확장해야합니다. – ByteFlinger

답변

0

실제로는 빈 슬라이스를 fmt.Fprintf에 보내야합니다. 매개 변수의 길이를 추가로 확인하면 문제가 해결됩니다.

func (p ConditionalPrinter) printF(s string, params ...interface{}) { 
    if p.print { 
     if len(params) == 0 { 
      fmt.Fprintf(p.writer, s) 
     } else { 
      fmt.Fprintf(p.writer, s, params) 
     } 
    } 
} 

또는이 :

func (p ConditionalPrinter) printF(s string, params ...interface{}) { 
    switch {   
    case !p.print: 
     return 
    case len(params) == 0: 
     fmt.Fprintf(p.writer, s) 
    default: 
     fmt.Fprintf(p.writer, s, params) 
    } 
} 

Playground link