Sto chiamando una funzione per eseguire una richiesta http, due parametri di riferimento passano per la funzione. Passo il [] byte all'interfaccia v. Voglio che la funzione aggiorni il valore di riferimento dell'interfaccia v. Il corpo della risposta è una stringa, voglio passare il valore della stringa all'interfaccia v. Tuttavia, ha provato molti modi ma non il successo.Passaggio di aggiornamento Golang per il valore di riferimento
Ecco il codice, è possibile vedere dichiaro byts
come v.(*[]byte)
al fine di rendere v
aggiornato con il valore stringa del corpo di risposta. Ma non funziona. Il v
è sempre nil
. Si prega di suggerire qualsiasi modo per rendere v
può essere aggiornato con il valore di stringa.
func (s *BackendConfiguration) Do(req *http.Request, v interface{}) error {
res, err := s.HTTPClient.Do(req)
defer res.Body.Close()
resBody, err := ioutil.ReadAll(res.Body)
if v != nil {
byts, ok := v.(*[]byte)
if len(resBody) > 0 {
byts = append(byts, resBody...)
return nil
}
}
}
return nil
}
Perché non tornare '(interfaccia {}, err)'? In questo modo potresti usare 'return byts, nil' dopo l'append – serejja
Voglio solo sottolineare che questo è ancora passato per valore ... il valore che viene copiato è il puntatore .. non quello che punta a ... # nitpick –
Mostraci il codice come si chiama questo metodo 'Do()'. Controlla anche la variabile 'ok'. Ma molto probabilmente il valore 'v' che passi è ** non ** di tipo' * [] byte'! – icza