Ich bin neu in Golang und ich versuche, ein Home-Automation-Framework in Golang zu schreiben, mit dem Micro-Framework und Protobuf-Framework.Golang Parsing von ProtoBuf
Ich habe derzeit eine harte Zeit zu versuchen, eine einfache Registrierung Typ Service zu implementieren.
Ein Beispiel für das Problem, das ich habe ist, dass ich die folgende haben, ich möchte eine Liste der Geräte erhalten zu können, sofern ein Kunde hat eine GET-Anforderung an http://localhost:8080/view/devices
habe ich folgendes protobuf Definition :
syntax = "proto3";
service DRegistry {
rpc View(ViewRequest) returns (DeviceRegistry) {}
}
message DeviceRegistry {
repeated Device devices = 1;
}
message ViewRequest {
string Alias = 1;
}
message Device {
string Alias = 1;
string HWAddress = 2;
string WakeUpMethod = 3;
repeated string BoundServices = 4;
}
Dann in meinem Dienst defination habe ich folgendes:
package main
import (
"log"
micro "github.com/micro/go-micro"
proto "github.com/srizzling/gotham/proto/device"
"golang.org/x/net/context"
)
// DRegistry stands for Device Registry and is how devices register to Gotham.
type DRegistry struct{}
var devices map[string]proto.Device
func (g *DRegistry) View(ctx context.Context, req *proto.ViewRequest, rsp *proto.DeviceRegistry) error {
filter := req.Alias
devices, err := filterDevices(filter)
rsp.Devices = devices
}
func filterDevices(filter string) (*[]proto.Device, error) {
// Currently only supports listing a single service for now
// TODO: expand filter to be more consise
filteredDevices := make([]proto.Device, 0, len(devices))
for _, e := range devices {
for _, f := range e.BoundServices {
if f == filter {
filteredDevices = append(filteredDevices, e)
}
}
}
return &filteredDevices, nil
}
func main() {
service := micro.NewService(
micro.Name("DRegistry"),
)
proto.RegisterDRegistryHandler(service.Server(), new(DRegistry))
if err := service.Run(); err != nil {
log.Fatal(err)
}
}
das Problem, das ich habe, ist, dass meine IDE (Visual Stud io Code) ist, dass I cannot use devices (type *[]device.Device) as type []*device.Device in assignment
die verwirrend ist.
TLDR: Wie ordne ich der proto.DeviceRegistry eine Sammlung von proto.Devices zu?
Hallo Rückkehr! Auf welcher Zeile erhalten Sie die Fehlermeldung? '* [] device.Device' - Zeiger auf eine Scheibe von' device.Device'. '[] * device.Device' - Scheibe von Zeigern zu einem 'device.Device'. Diese lesen könnte nützlich für Sie sein: https://divan.github.io/posts/avoid_gotchas/ –
Das war eine gute Dokumentation, danke! –