2011-11-08 2 views
0

내 서식을 효율적으로 인쇄 할 수 있기를 바랍니다. 문자열로 변환하면 성능 문제가 발생할 수 있습니다. 더 좋은 방법이 있습니까?효율적인 방법으로 내 서식을 인쇄 할 수 있습니다.

package main 

import "fmt" 

type T struct { 
    order_no [5]byte 
    qty int32 
} 
func (t T)String() string { 
    return fmt.Sprint("order_no=", t.order_no, 
    "qty=", t.qty) 
} 

func main() { 
     v := T{[5]byte{'A','0','0','0','1'}, 100} 

    fmt.Println(v) 
}  

출력은 나는 그것이 order_no=A0001 qty=100 될 것입니다 바랍니다 order_no=[65 48 48 48 49]qty=100 입니다.

은 BTW, 왜 func (t T)String() string 작업과 func (t *T)String() string이 작동하지 않을 수 있습니다 (goplay에)

+1

'v'는'T'가 아닌'* T'입니다. 따라서 메소드 세트에는'* T'에 대한 메소드가 포함되지 않습니다 ('* T' *에는'T' 메소드가 있음). Go는 어쨌든 (특별한 경우로서)'v'에'* T' 메쏘드를 호출 할 수있게 해줍니다. 인터페이스의 값을 처리 할 수 ​​없으므로'fmt.Println'에 인터페이스 매개 변수로'v'를 전달하면'fmt.Println'은'func (t * T) String() string'을 호출 할 수 없습니다. 그것에,하지만 그것은'func (t T) String() string'을 호출 할 수 있습니다. 이 문제를 해결하기 위해'& v'를 전달할 수 있습니다. – SteveMcQwark

+0

고마워, 스티브, 제 경우에는 복사 구조체를 막기 위해 fmt.Println (v) 대신 fmt.Println (& v)을 사용해야합니까? –

+0

일반적으로 v를 v : = & T {...}로 선언하고 직접 전달할 수도 있습니다. 때로는 구조체를 값으로 전달하는 것이 이치에 맞지만 여기서는 인터페이스에 전달하는 것이기 때문에 기계어보다 큽니다. 실제로는 없습니다. – SteveMcQwark

답변

1
package main 

import "fmt" 

type T struct { 
    order_no [5]byte 
    qty  int32 
} 

func (t T) String() string { 
    return fmt.Sprint(
     "order_no=", string(t.order_no[:]), 
     " qty=", t.qty, 
    ) 
} 

func main() { 
    v := T{[5]byte{'A', '0', '0', '0', '1'}, 100} 
    fmt.Println(v) 
} 

출력 :.

order_no=A0001 qty=100 
+0

string() convert가 새로운 메모리 할당을 생성합니까? C의 null 문자열이라면 같은 방법으로 사용할 수 있습니까? –

관련 문제