问题内容: 我有一个关于将常量类型限制为某些值的问题,以及如何在Go中完成该操作。说我创建类型,其具有两个常数值和与我想限制该类型(用户从创建类型的其它值)。我是否可以通过创建一个程序包并使其值和可见性以及将类型限制为包含的程序包来实现此目的?例如,请参见下面的代码 这是将类型限制为某些常量值的正确方法吗? 问题答案: 缺陷 提议的解决方案以您想要的方式并不安全。可以使用无类型的整数常量来创建新值
问题内容: 每次编译Go应用时,是否可以自动增加次要版本号? 我想在程序中设置一个版本号,并带有一个自动递增部分: 我设置的版本号是0.5,而132则是每次编译二进制文件时都会自动增加的值。 Go中有可能吗? 问题答案: Go链接器(go工具链接)具有一个选项,用于设置未初始化的字符串变量的值: 值。请注意,在Go 1.5之前,此选项采用两个单独的参数。现在,需要在第一个=符号上拆分一个参数。 作
问题内容: 我想知道是否可以在打包中共享测试实用程序代码。具体来说,我正在编写一个TCP服务器,该服务器将由多个处理程序用于不同的消息类型,并希望重用一组常见的测试实用程序。 主要的TCP服务器代码在: 该代码旨在成为一个共享库,其他程序包和其他程序包可使用该共享库来设置测试服务器和客户端以对其进行测试。例如,在子包中,我有: 这些文件全部导入,但它们无法访问在中定义的测试实用程序: 看来测试可以
问题内容: 在Go中,如何在运行时根据对象的类型创建对象的实例?我想您还需要先获取对象的实际值吗? 我正在尝试执行惰性实例化以节省内存。 问题答案: 为了做到这一点,你需要。 您可以使用结构类型(而不是int)执行相同的操作。还是其他的,真的。只需确保了解map和slice类型时new和make之间的区别即可。
问题内容: 我创建了一个要在后台隐形运行的应用程序(无控制台)。我该怎么做呢? (这是针对Windows,在Windows 7 Pro 64位上测试的) 问题答案: 在网上找到的文档说,我可以按照以下方式进行编译, 但这给出了一个错误: 对于较新的(1.1?)版本的编译器,这应该可以工作: 当我继续搜索时,我发现应该尽快更新官方文档,但是与此同时,还有很多较旧的示例回答了该错误。
问题内容: 我在Go中编写解释器,并且正在寻找惯用的方式来存储AST。我阅读了Go编译器的源代码,似乎他们使用了带有空方法的接口来表示AST。例如,我们具有以下层次结构, 这就是上述层次结构以“空方法”方式实现的方式。 上面的代码是一个人为的示例,这就是Go编译器如何使用许多空方法来实现 AST的方式。但为什么?注意定义了多少个空方法。随着层次结构深度的增加,它可能会变得非常复杂。 注释中指出,空
问题内容: 我想创建一个包含唯一字符串的数组。我怎样才能做到这一点? 问题答案: 如果要收集唯一元素,则为Set数据类型。Go没有集合数据类型,但是您可以使用来充当集合。 对于“好的”集合,请使用具有值类型(带有值)的映射并利用零值。对于内存占用最小的集合,请使用具有值类型的映射,因为类型的值不占用内存;并使用逗号分隔的习惯用法来判断值是否在集合/映射中。 这是set的“不错”版本的样子。代替切片
问题内容: 即使设置正确,我仍然无法“运行”或“运行”来找到自己的软件包。我究竟做错了什么? 问题答案: 它不起作用,因为您的源文件不在名为的目录中。并尝试匹配目录,而不是源文件。 设置为有效目录,例如 移动到与建筑应该只是罚款。 建议的其他步骤: 添加到您的依据: 移至的子文件夹,例如 现在应该在其中创建一个可执行文件,可以通过在终端中键入来调用该可执行文件。
问题内容: 我想创建一个类似Facebook的页面,如果用户向下滚动页面,则无需刷新即可获取旧帖子。我之前已使用Ajax完成此操作,并使用JS附加了HTML页面。 但是,由于我现在正在使用Go及其模板来构建页面,因此我不确定如何获得类似的结果。请帮我提出您的建议。 下面的链接显示了一种解决方案,但不适用于大量数据,因此很难在js中创建所有这些按钮。更新变量后,动态刷新模板的一部分 感谢帮助。 问题
问题内容: 两者之间到底有什么区别 和 第一个只是加快字段初始化速度的捷径吗?有性能方面的考虑吗? 问题答案: 第二种形式总是创建一个空的地图。 第一种形式是地图文字的特殊情况。地图文字允许创建 非空 地图: 现在,您的(通用)示例: 是没有初始值(键/值对)的地图文字。它完全等同于: 此外,这是为地图指定初始容量(大于初始分配的元素数量)的唯一方法。例: 将创建一个地图,该地图具有足够的空间来容
问题内容: 例: 是或的完整副本(将通过来完成)?还是它们只是一个字符串结构副本(将真实值保留在指针中)? 如果我们将其传递给函数怎么办?例如: 问题答案: 规格:转化次数: 特定规则适用于数字类型之间或字符串类型之间的(非恒定)转换。这些转换可能会更改的表示形式并产生运行时成本。 所有其他转换只会更改类型,而不会更改的表示形式。 因此,如果要在自定义类型的基础类型之间来回转换,则不会进行复制。
问题内容: 我在中创建一个变量,并根据条件更改值。但是值的范围仅保留在以下条件内: 在if条件内,我得到正确的值,但在外面。如何在外界条件下使用?有人可以帮我吗? 问题答案: Go 1.11添加了对更改模板变量值的支持。要定义变量,请使用: 要更改其值,请使用Assignment : 如果变量在块外创建但在块内更改,则更改将在块后可见。 像这样测试: 输出为(在Go Playground上尝试):
问题内容: 有没有一种方法可以在Windows下针对Go v1.7生成dll? 我尝试了经典 但是得到 Windows / amd64不支持-buildmode = shared 更新 好的,我知道了。对于那些感兴趣的人:https : //groups.google.com/forum/#!topic/golang- dev/ckFZAZbnjzU 问题答案: 从Go 1.10开始,Window
问题内容: 我想创建一个字符串映射到实例。这是正确的方法吗? 问题答案: 每当我想使用A时,我都发现切片是正确的选择,例如
问题内容: 在我拥有的一个小程序(尤其是cgo调用)上,go build和go run非常慢。我想缓存二进制文件,以便仅在源文件较新时才重建。我会使用带有%规则的简单Makefile,但是语言设计人员声称go的构建支持不需要Makefile。 我还有其他选择吗?go社区是否愿意使用另一个构建系统(可能是基于哈希的构建系统)来缓存和重用构建产品? 问题答案: 我写了一个工具来解决这个问题。单独不会检