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
입니다.
func (t T)String() string
작업과
func (t *T)String() string
이 작동하지 않을 수 있습니다 (goplay에)
'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
고마워, 스티브, 제 경우에는 복사 구조체를 막기 위해 fmt.Println (v) 대신 fmt.Println (& v)을 사용해야합니까? –
일반적으로 v를 v : = & T {...}로 선언하고 직접 전달할 수도 있습니다. 때로는 구조체를 값으로 전달하는 것이 이치에 맞지만 여기서는 인터페이스에 전달하는 것이기 때문에 기계어보다 큽니다. 실제로는 없습니다. – SteveMcQwark