在golang中打印一个空接口数组?

时间:2017-01-12 19:52:18

标签: pointers go

我有一个结构,其中包含field []interface{}形式的字段。如果我打印字段,我会返回一个指针引用。如果我尝试取消引用该字段,我会收到错误“invalid indirect”。

代码如下:

type MyType struct {
   field []interface{}
}
myType := //create a MyType. Field is just an array of numbers
println(myType.field) // prints a pointer reference, ex: [1/1]0xc420269aa0
println(*(myType.field)) // doesn't compile

如何在myType.field

中打印值

3 个答案:

答案 0 :(得分:1)

答案是遍历数组,甚至更好,使用fmt.Println

func dump(items []interface{}) {
 for i := 0; i < len(items); i++ {
    fmt.Println(items[i])
   }
}
// OR
fmt.Println(items)

答案 1 :(得分:0)

数组接口可以如下打印

{{ url_for('static', filename='styles/style.css') }}

这是结果

questionSet := []interface{}{} 

// ... code to fillup the question set

fmt.Printf("%t", questionSet)

这里的输出不是很漂亮,但是至少您可以看到结果并提取相关信息以进行进一步处理。

在以上结果中,[%!t(*domain.Question=&{First Economics question 3 [{Economics option 1 for student false} {Economics option 2 for student false} {Economics option 3 for student true} {Economics option 4 for student false}] [{Economics first topic} {Economics second topic}]}) %!t(*domain.Question=&{second Question 4 [{Qs2 Option 1 for student false} {Qs2 Option 2 for student false} {Qs2 Option 3 for student false} {Qs2 Option 4 for student false}] [{third topic} {fourth topic}]})] 是一个结构,这里是完整的结构供您参考。希望这可以帮助您更好地理解。

domain.Question

请考虑动词type Question struct { Questions string `json:"questions,omitempty" bson:"questions"` Marks string `json:"marks,omitempty" bson:"marks"` Options []QuestionOptions `json:"options,omitempty" bson:"options"` Topics []QuestionTopic `json:"topics,omitempty" bson:"topics"` } type QuestionOptions struct { Option string `json:"option" bson:"option"` Correct bool `json:"correct" bson:"correct"` } type QuestionTopic struct { Topic string `json:"topic" bson:"topic"` } 旨在打印布尔值(请参见https://golang.org/pkg/fmt/的文档概述),因此,当使用动词转储值的内容时,它已经可以使用了。而不是围棋作者的预期行为,因此,这种行为将来可能会改变。

和平

答案 2 :(得分:0)

您可以使用的另一种方式

https://play.golang.org/p/4lLQ4Gb2S0m

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    fmt.Println(dump(new(bool)))
    fmt.Println(dump([]interface{}{new(bool), new(string)}))
}

func dump(x interface{}) string {
    json, err := json.MarshalIndent(x, "", "  ")
    if err != nil {
        panic(err)
    }

    return string(json)
}
// Outputs:
// false
// [
//   false,
//   ""
// ]