我是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模块化编程方式)?
答案 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"`
}