静态成员变量,例如面向对象编程语言中的静态成员变量

9
我很新手于Go,我搜索了很多关于如何创建静态类并拥有像C#一样的静态函数/变量的问题,但是我没找到一个满意的答案。或许这个问题看起来很傻,但我不喜欢当我对某事不确定或者不能完全理解时。
假设我们有下面的代码:
public class Program
{
    public static string name = "Program tester.";

    public enum Importance
    {
        None,
        Trivial,
        Regular,
        Important,
        Critical
    };

    public static void tester(Importance value)
    {
        // ... Test against known Importance values.
        if (value == Importance.Trivial)
        {
            Console.WriteLine("Not true");
        }
        else if (value == Importance.Critical)
        {
            Console.WriteLine("True");
        }
    }
}

Golang是一种类似于C语言的编程语言,那么它是否具有类似于C++/C#等语言的行为呢?我的上述代码可以像C++/C#一样实现,或者使用类似于C的模块化编程方式进行传递吗?


3
Go语言没有像C++、C#和Java那样的类。它具有简单的聚合类似的用户定义类型以及单独定义的自由函数来操作这些类型。像你的常量可能会成为Go中某种包本地常量。 - Kerrek SB
谢谢您的答复 :) 这意味着我可以通过声明一个结构体,然后有一个与之关联的方法来初始化所有内容。我太习惯使用面向对象编程了!^^ - Emixam23
一个函数不同于一个方法(但是一个方法是一个函数)。 - too honest for this site
一个方法必须与一个类相关联,不是吗? - Emixam23
2
在Go语言中,方法是应用于接收器的函数(可以被翻译为将接收器作为其第一个参数的函数):https://golang.org/ref/spec#Method_declarations - VonC
有趣的回答! - Emixam23
2个回答

35

Go语言中没有继承,
但您可以通过Golang的方式来执行所有面向对象编程(OOP)的操作。

另请参见:
https://github.com/luciotato/golang-notes/blob/master/OOP.md https://www.goinggo.net/2013/07/object-oriented-programming-in-go.html

1:C#类中的静态变量 => Golang包中的全局变量
2:C#中的枚举 => 新包,枚举名称和枚举元素类型的const类型
3:OOP中的类 => 结构体类型
4:类方法 => 带有接收器方法的结构体
5:C#/Java抽象方法(C++中的纯虚函数) => 接口方法,例如io.Reader
6:public => 首字母大写的名称
7:private => 首字母小写的名称
8:命名空间 => 包名称
9:继承 => 嵌入式结构体和嵌入式接口
10:线程 => Go协程
11:锁定 => sync.Mutex
...


这个答案正是我想要的!谢谢! - Emixam23
这其实是一种非常有用的看待来自 Java 等面向对象世界的方式... 谢谢!那么通道呢?我猜没有直接的同构... 不过我不知道为什么,它让我想起我们以前在 C++ 中编写 stdout 的方式,例如 std::cout << "hello"(现在他们使用 <- 代替了 <<)。 - Victor
“在Go中没有继承”如何回答“如何向结构体添加静态成员”的问题? - user5047085

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接