πŸ’¬ Π§Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ использовании ΠΌΠ°ΠΏΡ‹ Ρ‚ΠΈΠΏΠ° any?



ΠŸΡ€ΠΈ Π΄Π΅ΠΌΠ°Ρ€ΡˆΠ°Π»ΠΈΠ½Π³Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с ΠΌΠ°ΠΏΠΎΠΉ вмСсто структуры. Когда ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ значСния Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π° с ΠΌΠ°ΠΏΠΎΠΉ, Π° Π½Π΅ со статичСской структурой, Π΄Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ. Но Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈΜ† ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΈΜ† ΠΏΠ°Π½ΠΈΠΊΠΈ.



πŸ“Œ Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:



b := getMessage()

var m map[string]any

err := json.Unmarshal(b, &m)

if err != nil {

return err

}





Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΈΜ† JSON:



{

"id": 32,

"name": "foo"

}





ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΌΠ°ΠΏΡƒ map[string]any, ΠΎΠ½Π° автоматичСски парсит всС поля: map[id:32 name:foo]



ΠŸΡ€ΠΈ использовании ΠΌΠ°ΠΏΡ‹ Ρ‚ΠΈΠΏΠ° any Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ любоС числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, содСрТит ΠΎΠ½ΠΎ дСсятичноС число ΠΈΠ»ΠΈ Π½Π΅Ρ‚, прСобразуСтся Π² Ρ‚ΠΈΠΏ float64.



Π’Ρ‹Π²Π΅Π΄Π΅ΠΌ Ρ‚ΠΈΠΏ m["id"] ΠΈ убСдимся Π² этом:



fmt.Printf("%T\n", m["id"])



float64





Π’Π°ΠΆΠ½ΠΎ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈΜ† ΠΈ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ числовыС значСния Π±Π΅Π· дСсятичных Π·Π½Π°ΠΊΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² Ρ†Π΅Π»Ρ‹Π΅ числа.