JSON en streaming en Go
Decoder y Encoder operan sobre un reader y un writer, un valor a la vez.
type Run struct {
Lang string `json:"lang"`
TPM int `json:"tpm"`
}
func decodeStream(input string) ([]Run, error) {
decoder := json.NewDecoder(strings.NewReader(input))
var runs []Run
for {
var run Run
err := decoder.Decode(&run)
if errors.Is(err, io.EOF) {
return runs, nil
}
if err != nil {
return nil, fmt.Errorf("decode: %w", err)
}
runs = append(runs, run)
}
}
func strictDecode(input string) error {
decoder := json.NewDecoder(strings.NewReader(input))
decoder.DisallowUnknownFields()
var run Run
return decoder.Decode(&run)
}
Cómo funciona
- Un Decoder lee varios valores de un mismo stream.
DisallowUnknownFieldsconvierte una errata en un error.- Esto es lo que usas para el cuerpo de una petición o un archivo grande.
Palabras clave y builtins usados aquí
appenderrorforfuncifintreturnstringstructtypevar
El intento, en números
- Líneas
- 27
- Caracteres a escribir
- 538
- Tokens
- 139
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 83 segundos.
Paso 3 de 3 en Codificación; paso 3 de 26 en Biblioteca estándar y estructura del proyecto.