我不明白在哪一点上调用了Interface方法.我正在看Go Go中的以下示例:
package main
import "fmt"
type Person struct {
Name string
Age int
}
func (p Person) String() string {
return fmt.Sprintf("%v (%v years)", p.Name, p.Age)
}
func main() {
a := Person{"Arthur Dent", 42}
z := Person{"Zaphod Beeblebrox", 9001}
fmt.Println(a, z)
}
Run Code Online (Sandbox Code Playgroud)
问题:
我明白func (p Person)接收String()方法并返回string我要显示的方法.但fmt.Println在main()方法调用String()在某些时候,对不对?
我看了一下源fmt在godoc,但我仍然无法看着办吧!
另一个例子:
如果我添加自己的界面,让我们说Stringer2一个被调用的方法String2(),然后创建一个func (p Person) String2() {....}.如何String() …
在周末第一次玩Docker并看到来自irssi,mutt,浏览器等的所有内容的微小图像后,我想知道本地安装的软件包是否正在为数十个容器取代?
我可以看到保持基本系统非常干净的好处,并且所有这些容器都是独立的,并且可以轻松地重新定位到不同的桌面,甚至是Windows.每个运行一个像阿尔卑斯山的小型发行版,与应用程序,如irssi等....
这是事情的发展方向还是我错过了这里的船?
我目前在Perl中处理了5个巨大的(每个400万行)日志文件,我想我可能会尝试在Go及其并发功能中实现相同的功能.因此,在Go中缺乏经验,我在考虑如下所示.任何关于该方法的评论将不胜感激.一些粗糙的伪代码:
var wg1 sync.WaitGroup
var wg2 sync.WaitGroup
func processRow (r Row) {
wg2.Add(1)
defer wg2.Done()
res = <process r>
return res
}
func processFile(f File) {
wg1.Add(1)
open(newfile File)
defer wg1.Done()
line = <row from f>
result = go processRow(line)
newFile.Println(result) // Write new processed line to newFile
wg2.Wait()
newFile.Close()
}
func main() {
for each f logfile {
go processFile(f)
}
wg1.Wait()
}
Run Code Online (Sandbox Code Playgroud)
所以,想法是我同时处理这5个文件,然后每个文件的所有行也将同时处理.
那会有用吗?