报错信息是:serviceservice.go:38:11: assignment mismatch: 2 variables but 1 values
代码如下
package service
import (
protos "dev/course/protos"
"golang.org/x/net/context"
"dev/course/router"
"reflect"
"errors"
"log"
"encoding/json"
"fmt"
// "os"
)
type CourseService struct {
}
func NewCourseService() *CourseService {
return &CourseService{}
}
func (this *CourseService) Get(ctx context.Context, req *protos.CourseRequest) (*protos.CourseResponse, error) {
result, err := this.Call(req.GetRouter(), req.GetParameters())
if err != nil {
// fmt.Println(err)
log.Fatal(err)
}
DataJsonBytes, err := json.Marshal(result[0].Interface())
if err != nil {
fmt.Println(err)
log.Fatal(err)
}
values := make(map[string]string)
values["data"] = string(DataJsonBytes)
if _, ok := result[2]; ok { // 报错在这一行!!!
OtherJsonBytes, err := json.Marshal(result[2].Interface())
if err != nil {
log.Fatal(err)
}
values["other"] = string(OtherJsonBytes)
}
return &protos.CourseResponse{
Status: 200,
Values: values,
}, nil
}
func (this *CourseService) Call(name string, params ... interface{}) (result []reflect.Value, err error) {
if _, ok := router.Routers[name]; !ok {
err = errors.New(name + " does not exist.")
return
}
f := reflect.ValueOf(router.Routers[name])
if len(params) != f.Type().NumIn() {
err = errors.New("The number of params is not adapted.")
return
}
in := make([]reflect.Value, len(params))
for k, param := range params {
in[k] = reflect.ValueOf(param)
}
result = f.Call(in)
if result[1].Interface() != nil {
err = result[1].Interface().(error)
}
return
}
_, ok := result[2]
result[2]就一个值, 不能同时赋给两个变量
_
和ok
你的写法对 map 管用, 但不是 array, 虽然他们看上去一个样
见下面的例子