Go 中的 C# 代码相当于什么,我该如何构建它
class ModelX<T>
{
public T Data { get; set; }
}
ModelX<int>
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的事情:
type ModelX<T> struct {
ModelY
Data []T
}
m := ModelX<T>
Run Code Online (Sandbox Code Playgroud)
这个怎么做?那可能吗?
在Golang中,我们使用带接收器方法的结构.一切都很完美到这里.
但是,我不确定接口是什么.我们在结构中定义方法,如果我们想在结构上实现一个方法,我们再次在另一个结构下编写它.
这意味着接口似乎只是方法定义,只占用了页面上额外不需要的空间.
有没有例子解释我为什么需要一个界面?
我试图使用Go来实现叶子上带有值的二叉树,即相当于:
data Tree a
= Node {left: Tree, right: Tree}
| Leaf {value: a}
Run Code Online (Sandbox Code Playgroud)
我有两个问题:1,我无法找到一种方法来创建一个包含多个构造函数的类型,所以我必须将所有数据放在一个中.2,我不能使它变成多态,所以我不得不使用interface{}(我猜这是类型系统的"选择退出"?).这是我能做的最好的:
package main
import ("fmt")
type Tree struct {
IsLeaf bool
Left *Tree
Value interface{}
Right *Tree
}
func build(n int) *Tree {
if (n == 0) {
return &Tree{IsLeaf: true, Left: nil, Value: 1, Right: nil}
} else {
return &Tree{IsLeaf: false, Left: build(n - 1), Value: 0, Right: build(n - 1)}
}
}
func sum(tree *Tree) int {
if (tree.IsLeaf) {
return …Run Code Online (Sandbox Code Playgroud) 最近有很多关于Golang的批评,因为它不支持泛型.这到底是什么意思呢?您如何向来自Ruby等动态类型语言的人解释这一点,这不是一个熟悉的概念?
我正在尝试一些编程语言.
我对Go的简单性感到兴奋,但在玩完之后我遇到了一些麻烦.
1.我知道Go不支持泛型和继承.有没有办法实现通用列表?
我考虑使用:
type Any interface { }
Run Code Online (Sandbox Code Playgroud)
但是如何检查值是否为NULL.
我正在寻找一些与C相当的实现
struct List {
List* tail;
void* head;
}
Run Code Online (Sandbox Code Playgroud)
或者使用代数数据类型:
data List a = Nil | Cons a (List a)
Run Code Online (Sandbox Code Playgroud)
2.更高级的要求是为具有特定类型字段的对象制作一些容器?
例如,在Scala编程语言中,我可以键入:
val List[Animal { type SuitableFood = Grass} ]
Run Code Online (Sandbox Code Playgroud)
得到List的Animals,其中有一个成员类型SuitableFood是Grass