Go中Java静态属性的等价性

Go中Java静态属性的等价性,java,go,static,Java,Go,Static,因此,我们可以创建一个classArray的对象,还可以创建classArray的属性。这段代码在Go中的等价性是什么?Go没有类。Go没有静态变量。因此,没有等价物 Go最接近的概念是包常量和结构字段。两者都与您所寻找的不完全相同。这不是一个简单的等价物: class Array { public static int MAX_SIZE = 42; } Array arr = new Array(); int size = Array.MAX_SIZE; 在另一个地方: packag

因此,我们可以创建一个class
Array
的对象,还可以创建class
Array
的属性。这段代码在Go中的等价性是什么?

Go没有类。Go没有静态变量。因此,没有等价物


Go最接近的概念是包常量和结构字段。两者都与您所寻找的不完全相同。

这不是一个简单的等价物:

class Array {
    public static int MAX_SIZE = 42;
}
Array arr = new Array();
int size = Array.MAX_SIZE;
在另一个地方:

package array

type Array struct {}

const MaxSize int = 42

如果你试图像用Java编程一样用Go编程,你的代码会很糟糕。忘记Java,用Go编写程序。围棋没有课

在Go中,您可能会看到如下内容(它不是Java类):

包数组
常量MaxSize=42
类型数组结构{
片[]字节
}
func新(整型大小)*数组{
如果尺寸<0{
归零
}
如果大小>最大大小{
大小=最大大小
}
返回和数组{slice:make([]字节,大小)}
}
func(a*数组)Size(Size int)int{
如果a==nil{
返回0
}
回程透镜(a.slice)
}

Go中没有等价物。你是在问常量还是类变量?@cricket\u 007关于类变量简化深奥语言功能的等价物本身很少有用。这似乎是一个XY问题。你的实际目标是什么?我可以有一个结构和一个同名的包?你可以,有点偶然,但它没有用。应该始终使用小写。一个结构也可以有一个小写的名称,但是它不能被导出,从而限制了它的实用性。但是你没有理由需要两者共享一个名称,所以这并不重要。@Axel:“我可以有一个同名的结构和一个包?”是的,它很有用。例如,
包文件;类型文件结构{fd uintpttr};键入文件结构{File*File};func New()*文件{return&File{File:New(File)}
@peterSO:在那个实例中,名称的相似性并不能购买我所看到的任何实用程序。也可能是
输入foo
,你会得到同样的功能。@Flimzy:“不买我看到的任何实用工具。”没关系。我的评论是写给阿克塞尔的。
package main

import "./array"

fmt.Println(array.MaxSize)
package array

const MaxSize = 42

type Array struct {
    slice []byte
}

func New(size int) *Array {
    if size < 0 {
        return nil
    }
    if size > MaxSize {
        size = MaxSize
    }
    return &Array{slice: make([]byte, size)}
}

func (a *Array) Size(size int) int {
    if a == nil {
        return 0
    }
    return len(a.slice)
}