golang接口使用记录

进击的大只文 · · 483 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang接口使用记录

1. 总述

接口类型是对其他类型行为的概括与抽象,Go语言的独特之在于它是隐式实现,无需申明它实现哪些接口,只要提供接口所必须的方法即可。

接口即约定

实现单词和行的计数器,考虑使用bufio.ScanWords

// counter.go
// 计数器  

type Counter interface {
    Count(fileName string) error  
}  
  
// 单词计数  
type WordCount int  
  
func (w *WordCount) Count(fileName string) error {  
    file, err := os.Open(fileName)  
    if err != nil {  
        return errors.New("open file fail: " + err.Error())  
    }
    scanner := bufio.NewScanner(file)  
    scanner.Split(bufio.ScanWords)  
    count := 0  
    for scanner.Scan() {  
        count += 1  
    }  
    *w = WordCount(count)  
    return nil  
}  
  
  
// 行计数器  
type LineCount int  
  
func (l *LineCount) Count(fileName string) error {  
    file, err := os.Open(fileName)  
    if err != nil {  
        return errors.New("open file fail: " \+ err.Error())  
    }  
    scanner := bufio.NewScanner(file)  
    scanner.Split(bufio.ScanLines)  
    count := 0  
    for scanner.Scan() {  
        count += 1  
    }  
    *l = LineCount(count)  
    return nil  
}
// counter_test.go
// 计数器单测

func TestWordCount_Count(t *testing.T) {  
    var w WordCount  
    if err := w.Count("log"); err != nil {  
        t.Errorf("word count fail: %s", err.Error())  
        return  
    }  
    if w != 7 {  
        t.Error("word count not equal to 7")  
    }  
    t.Log("word count success")  
}  

func TestLineCount_Count(t *testing.T) {  
    var l LineCount  
    if err := l.Count("log"); err != nil {  
        t.Errorf("line count fail: %s", err.Error())  
        return  
    }  
    if l != 4 {  
        t.Error("line count not equal to 4")  
    }  
    t.Log("line count success")  
}

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:进击的大只文

查看原文:golang接口使用记录

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

483 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传