Funktion funktioniert nicht mit if else-Anweisungen [duplizieren]

Jan 15 2021

Ich versuche, ein einfaches Cache-System mit Go als Tutorial zu erstellen.

Aus irgendeinem Grund führt die if else-Anweisung zu einem Fehler, wenn ich dies ausführe.

package datasource

import (
    "fmt"
    "github.com/patrickmn/go-cache"
    "time"
)

type DataSource interface {
    Value(key string) (interface{}, error)

}

// DataSourceStr type, implements the DataSource interface
type DataSourceStr struct {
    data map[string]string
}


var cache = cache.New(5*time.Minute, 5*time.Minute)


func (n *DataSourceStr) Value(key string) (interface{}, error) {
        /* 
    1. Compute a cache key
    2. Search cache key
    3. If hit return value
    4. If miss, do datasource
    5. Cache and return slow thing.
    */
    
    cached, found := cache.Value(key)
    if found {
        return cached, nil
    }

    else if _, ok := n.data[key]; ok 
    {
        //measure how often a key gets called.
        cache.Set(key, n.data[key], cache.DefaultExpiration)
        return n.data[key], nil
    } else {
        return nil, fmt.Errorf("key not found %v", ok)
    }
}




func getFromDS(datasource DataSource, key string) (string, error) {

    
    v, err := datasource.Value(key)
    
    //create a map that decays based on time.

    if err != nil {
        return "", nil
    }

    return fmt.Sprint(v), nil
}

Was mache ich falsch? Ich versuche, einen Schlüssel einzugeben und dann den Wert entweder aus dem Cache oder aus der Datenbank zurückzugeben. Ich bin mir nicht sicher, was ich mit der Syntax falsch gemacht habe!

Antworten

1 heheh Jan 15 2021 at 14:39

go bedingte Anweisungen folgen der folgenden Syntax

   if something{
      ......

   } else if something{
      ......

   } else{
      ......
   }

eine ausführliche Antwort