Go - 静态成员变量,例如OOP语言

时间:2016-05-29 13:57:35

标签: oop go

我是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语言传递(使用C模块化编程方式)?

2 个答案:

答案 0 :(得分:10)

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#class =>中的静态变量Golang包中的全局变量
2:C#中的枚举=>具有枚举名称的新包和枚举元素的常量类型
3:OOP中的类=>结构类型
4:类方法=>结构与接收方法
5:C#/ Java抽象方法(C ++中的纯虚函数)=>接口方法如io.Reader
6:public =>第一个字母大写字母名称
7:private =>首字母小写名称
8:namespace =>包名称 9:继承=>嵌入式结构和嵌入式接口
10:Thread =>去常规
11:lock => sync.Mutex
......

答案 1 :(得分:0)

没有像使用Java类的静态成员那样获得结构的静态成员的真正方法,而是使用StructTags向结构中添加元数据或标记:

https://medium.com/golangspec/tags-in-golang-3e5db0b8ef3e

What are the use(s) for tags in Go?

https://golang.org/pkg/reflect/#StructTag

通常,在创建用于取消封送JSON的结构时会看到它们:

type Foo struct {
  Bar string `json:"bar,omitempty"`
}