У меня очень простой код, подобный этому:
package chain_of_responsibility
import (
"fmt"
"reflect"
)
type CustomerBalanceRequest struct{
CustomerName string
Balance int
}
type BalanceRequest interface {
Handle(request CustomerBalanceRequest)
}
type HeadEditor struct{
Next BalanceRequest
}
func (h *HeadEditor) Handle(b CustomerBalanceRequest){
if b.Balance < 1000 {
fmt.Printf("%T approved balance for %v request. Balance: %v\n", h, b.CustomerName, b.Balance)
fmt.Printf("%v approved balance for %v request. Balance: %v\n", reflect.TypeOf(h), b.CustomerName, b.Balance)
fmt.Printf("%v approved balance for %v request. Balance: %v\n", reflect.TypeOf(h).String(), b.CustomerName, b.Balance)
fmt.Printf("%v approved balance for %v request. Balance: %v\n", reflect.TypeOf(h).Name(), b.CustomerName, b.Balance)
} else{
h.Next.Handle(b)
}
}
В строках fmt.Printf я хочу напечатать имя типа HeadEditor. Я использую различные способы получить это, и это мой результат:
*chain_of_responsibility.HeadEditor approved balance for John request. Balance: 500
*chain_of_responsibility.HeadEditor approved balance for John request. Balance: 500
*chain_of_responsibility.HeadEditor approved balance for John request. Balance: 500
approved balance for John request. Balance: 500
Проблема в первых 3 вызовах Printf, я могу получить имя типа, но они включают указатель и имя пакета. Есть ли способ, которым я могу получить только «HeadEditor» без имени пакета и указателя и, конечно, кроме решения для обработки строк, как удаление * и имя пакета из результата.