zergon321

Get map value type check

Mar 29th, 2022 (edited)
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 0.99 KB | None | 0 0
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Person struct {
  6.     Name    string
  7.     Surname string
  8.     Age     int
  9. }
  10.  
  11. func GetValueTypeCheck[T any](dict map[string]interface{}, key string) (T, error) {
  12.     var zeroValue T
  13.     valueData, ok := dict[key]
  14.  
  15.     if !ok {
  16.         return zeroValue, fmt.Errorf(
  17.             "no value for key '%s'", key)
  18.     }
  19.  
  20.     value, ok := valueData.(T)
  21.  
  22.     if !ok {
  23.         return zeroValue, fmt.Errorf(
  24.             "wrong value type")
  25.     }
  26.  
  27.     return value, nil
  28. }
  29.  
  30. func main() {
  31.     dict := map[string]interface{}{
  32.         "name":   "DB",
  33.         "rating": 15,
  34.         "record": &Person{
  35.             Name:    "Jane",
  36.             Surname: "Doe",
  37.             Age:     32,
  38.         },
  39.     }
  40.     rating, err := GetValueTypeCheck[int](dict, "rating")
  41.     handleError(err)
  42.  
  43.     fmt.Println(rating)
  44.  
  45.     name, err := GetValueTypeCheck[string](dict, "name")
  46.     handleError(err)
  47.  
  48.     fmt.Println(name)
  49.  
  50.     person, err := GetValueTypeCheck[*Person](dict, "record")
  51.     handleError(err)
  52.  
  53.     fmt.Println(person.Name)
  54. }
  55.  
  56. func handleError(err error) {
  57.     if err != nil {
  58.         panic(err)
  59.     }
  60. }
Add Comment
Please, Sign In to add comment