我正在学习Go,并且一直沉迷于Go旅游(exercise-
stringer.go:https :
//tour.golang.org/methods/7)。
这是一些代码:
type IPAddr [4]byte
// TODO: Add a "String() string" method to IPAddr.
func (a IPAddr) String() string {
return fmt.Sprintf("%d.%d.%d.%d", a...)
}
所以我想出了IPAddr
is 的内部表示[4]byte
,所以散布算子起作用了。但我得到:
cannot use []string literal (type []string) as type []interface {} in argument to fmt.Sprintf
有没有搞错?字符串切片也不起作用,这是怎么回事?
编辑 :对不起,我的问题中有一个错误-
错误是关于type的IPAddr
,不是[]string
。我在玩代码,并且粘贴了错误的输出。无论如何,多亏了peterSO和0x434D53关于Go中切片的不变性。
好吧,这提出了另一个问题。为什么以这种方式实施?我想您只是有一些Iterable
接口,所以实现它的任何结构都将“正常工作”。
旁注
:当我第一次听说Go时,有一个大胆的声明“已编译,但富有表现力”。显式接口实现是一个很好的例子,但是诸如显式转换,缺少运算符重载之类的事情给我“
90年代Java的感觉”。很难过,因为Go似乎是一门很棒的语言。
围棋之旅
练习:纵梁
使
IPAddr
类型工具fmt.Stringer
将地址打印为点分四边形。例如,
IPAddr{1, 2, 3, 4}
应打印为"1.2.3.4
“。package main import "fmt" type IPAddr [4]byte // TODO: Add a "String() string" method to IPAddr. func main() { addrs := map[string]IPAddr{ "loopback": {127, 0, 0, 1}, "googleDNS": {8, 8, 8, 8}, } for n, a := range addrs { fmt.Printf("%v: %v\n", n, a) } }
有没有隐式转换[]string
到[]interface {}
。见转换中的围棋语言的编程规范。您需要提供显式转换。例如,
package main
import "fmt"
type IPAddr [4]byte
// A "String() string" method for IPAddr.
func (a IPAddr) String() string {
return fmt.Sprintf("%d.%d.%d.%d", a[0], a[1], a[2], a[3])
}
func main() {
addrs := map[string]IPAddr{
"loopback": {127, 0, 0, 1},
"googleDNS": {8, 8, 8, 8},
}
for n, a := range addrs {
fmt.Printf("%v: %v\n", n, a)
}
}
输出:
loopback: 127.0.0.1
googleDNS: 8.8.8.8
问题内容: D在什么 设置系统属性值。 在的Java应用程序启动立场?由于某种原因,它一直困扰着我,为什么是D? 问题答案: 我一直认为它是 定义 属性的值……可能是C编译器的遗留物,通常与代码中的用法相似。 编辑:目前,我对此来源最接近的是一些JDK 1.1文档 ,该文档将标志指定为: 重新定义 属性值。propertyName是要更改其值的属性的名称,而newValue是要将其更改为的值。[…
我想知道为什么我们需要std::promise和std::future?为什么c 11标准将get和set_ value分为两个独立的类std::future和std::promise?在这篇文章的回答中,它提到: 它被分成这两个独立的“接口”的原因是为了对“消费者/阅读器”隐藏“写入/设置”功能。 我不明白躲在这里的好处。但是,如果我们只有一个类的“未来”,那不是更简单吗?例如:promise.
描述 (Description) 字符类\D匹配任何非数字。 例子 (Example) 以下示例显示了预定义字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PredefinedCharacterClassDemo { pr
描述 (Description) 字符类\d匹配0到9之间的任何数字。 例子 (Example) 以下示例显示了预定义字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PredefinedCharacterClassDemo {
问题内容: 我试图实施Miller- Rabin素数测试 ,并且对为什么中型数字(〜7位数字)花费如此长时间(> 20秒)感到困惑。我最终发现以下代码行是问题的根源: (其中,和都是相似的,但不相等的中号,是幂运算符,并且是模运算符) 然后,我尝试将其替换为以下内容: 相比之下,它几乎是瞬时的。 对于上下文,这是原始功能: 定时计算示例: 输出(与PyPy 1.9.0一起运行): 输出(在Pyth
本文向大家介绍\ d与\ D在JavaScript中?,包括了\ d与\ D在JavaScript中?的使用技巧和注意事项,需要的朋友参考一下 \ d与\ D \ d和\ D之间有很多区别,其中前者导致数字,而后者导致非数字,例如e,^等。它们与全局对象“ g ”一起使用,因此所有文本中的数字和非数字将显示在输出中。让我们详细讨论它。 语法1 语法2 示例1 在以下示例中,将' \ d '与全局对