Tag: 反射

  • 在 Golang 中用名字调用函数

    上个星期,我写了篇《Function call by name in Golang》。由于是英文的,所以被人诟病(说谁,谁知道!)。好吧,现在用中文重新写一遍。

    Golang 中的函数跟 C 的一样,是个代码块,不过它可以像其他类型那样赋值给一个变量。

    如果你对函数不熟悉,《Codewalk: First-Class Functions in Go》应该是个不错的起点。已经有所了解?那么继续吧!

    首先,来看看这段 PHP 代码:

    function foobar() {
        echo "Hello Golang\n";
    }
    $funcs = array(
        "foobar" => "foobar",
        "hello"  => "foobar",
    );
    $funcs["foobar"]();
    $funcs["hello"]();
    

    它会输出:

    mikespook@mikespook-laptop:~/Desktop$ php foobar.php
    Hello Golang
    Hello Golang
    

    (more…)

  • [翻译]反射的规则

    第一次知道反射的时候还是许多年前在学校里玩 C# 的时候。那时总是弄不清楚这个复杂的玩意能有什么实际用途……然后发现 Java 有这个,后来发现 PHP 也有了,再后来 Objective-C、Python 什么的也都有……甚至连 Delphi 也有 TRttiContext……反射无处不在!!!

    Go 作为一个集大成的现代系统级语言,当然也需要有,必须的!

    大牛 Rob Pike 的这篇文章相对全面的介绍了 Go 语言中的反射的机制已经使用。觉得值得研读,于是翻译于此。

    ———-翻译分割线———-

    反射的规则

    在运行时反射是程序检查其所拥有的结构,尤其是类型的一种能力;这是元编程的一种形式。它同时也是造成混淆的重要来源。

    在这篇文章中将试图明确解释在 Go 中的反射是如何工作的。每个语言的反射模型都不同(同时许多语言根本不支持反射)。不过这篇文章是关于 Go 的,因此接下来的内容“反射”这一词表示“在 Go 中的反射”。
    (more…)