이 구조체는 소켓 메시지를받을 때 readJson과 structs가 데이터로 채워지고 모두 괜찮습니다. 그것은 몇 가지 함수를 거치지 만 일단 Send 함수를 거치면 이상한 방식으로 그것을 직렬화합니다. 결국에는 많은 숫자를 얻었고 문자열로 변환하면 데이터가 누락됩니다.구조체를 redigo Send 함수에 전달하면 데이터가 손실되고 데이터가 누락됩니다.
type Reply struct {
Topic string `redis:"topic" json:"topic"`
Ref string `redis:"ref" json:"ref"`
Payload struct {
Status string `redis:"status" json:"status"`
Response map[string]interface{} `redis:"response" json:"response"`
} `json:"payload"`
}
이 형식으로 메시지를 브로드 캐스트하고 싶습니다. 내가 수정 및 문제 데이터
func (rr *redisReceiver) run() error {
l := log.WithField("channel", Channel)
conn := rr.pool.Get()
defer conn.Close()
psc := redis.PubSubConn{Conn: conn}
psc.Subscribe(Channel)
go rr.connHandler()
for {
switch v := psc.Receive().(type) {
case redis.Message:
rr.broadcast(v.Data)
case redis.Subscription:
l.WithFields(logrus.Fields{
"kind": v.Kind,
"count": v.Count,
}).Println("Redis Subscription Received")
log.Println("Redis Subscription Received")
case error:
return errors.New("Error while subscribed to Redis channel")
default:
l.WithField("v", v).Info("Unknown Redis receive during subscription")
log.Println("Unknown Redis receive during subscription")
}
}
}
합니까 Redigo 데이터 구조의 유형을 지원하지 어디서
이 무엇입니까?
이것은 내가 얻는 형식과 내가 가져야하는 형식입니다. Reply
유형 fmt.Print(v)
을 사용하여 인코딩됩니다
Go Type Conversion
[]byte Sent as is
string Sent as is
int, int64 strconv.FormatInt(v)
float64 strconv.FormatFloat(v, 'g', -1, 64)
bool true -> "1", false -> "0"
nil ""
all other types fmt.Print(v)
: https://play.golang.org/p/TOzJuvewlP