Go 语言圣经 Display,一个递归的值打印器

12.3 Display,一个递归的值打印器

知识点

  • 1.reflect包提供了反射功能,定义两个类型Type和Value
  • 2.Type表示一个Go类型. 它是一个接口
  • 3.一个Value,有很多方法来检查其内容, 无论具体类型是什么
  • 4.对象图中含有回环,Display将会陷入死循环

代码

  • 章节中的例子

func test_Display()  {

    e, _ := eval.Parse("sqrt(A / pi)")
    display.Display("e", e)


    fmt.Print("\n\n=====================\n\n")

    type Movie struct {
        Title, Subtitle string
        Year            int
        Color           bool
        Actor           map[string]string
        Oscars          []string
        Sequel          *string
    }

    strangelove := Movie{
        Title:    "Dr. Strangelove",
        Subtitle: "How I Learned to Stop Worrying and Love the Bomb",
        Year:     1964,
        Color:    false,
        Actor: map[string]string{
            "Dr. Strangelove":            "Peter Sellers",
            "Grp. Capt. Lionel Mandrake": "Peter Sellers",
            "Pres. Merkin Muffley":       "Peter Sellers",
            "Gen. Buck Turgidson":        "George C. Scott",
            "Brig. Gen. Jack D. Ripper":  "Sterling Hayden",
            `Maj. T.J. "King" Kong`:      "Slim Pickens",
        },

        Oscars: []string{
            "Best Actor (Nomin.)",
            "Best Adapted Screenplay (Nomin.)",
            "Best Director (Nomin.)",
            "Best Picture (Nomin.)",
        },
    }

    display.Display("strangelove", strangelove)

    fmt.Print("\n\n=====================\n\n")

    display.Display("os.Stderr", os.Stderr)

    fmt.Print("\n\n=====================\n\n")

    display.Display("rV", reflect.ValueOf(os.Stderr))
    
    fmt.Print("\n\n=====================\n\n")

    var i interface{} = 3

    display.Display("i", i)
    display.Display("&i", &i)

    fmt.Print("\n\n=====================\n\n")
    //4.对象图中含有回环,Display将会陷入死循环
    // a struct that points to itself
    type Cycle struct{ Value int; Tail *Cycle }
    var c Cycle
    c = Cycle{42, &c}
    display.Display("c", c)
}

------不足之处,欢迎补充------

备注

《Go 语言圣经》

  • 学习记录所使用的GO版本是1.8
  • 学习记录所使用的编译器工具为GoLand
  • 学习记录所使用的系统环境为Mac os
  • 学习者有一定的C语言基础

代码仓库

你可能感兴趣的:(Go,go)