zoukankan      html  css  js  c++  java
  • 对 Golang 简洁架构实战的理解,以及 Golang 开源项目包定义的解惑

    前言

    我们在查看 Golang 代码的时候往往跳转到一个 interface{} 就终止了,这个时候你看不到代码的实现,其实这就是面向接口设计的一种巧妙之处,其实这里是为了让组合代替面向对象的复杂嵌套,或者说简化父子类形成的对象树。intreface{}struct 的组合,interface{} 中定义方法名,入参,返回值,struct 中定义对应的类的变量,从而解耦方法与变量的绑定关系。

    实操

    我们来看我写的一个简单例子:

    对于 interface{} 用法的一个讲解:
    一个 interface{} 类型的数据作为返回值得时候是可以返回包内的 struct 的,这个 struct 内的方法实现了 interface{} 中的方法。

    当你在 main() 或其他函数中调用 New*() 方法的时候 interface{} 被返回到对应变量中。随后调用 interface{} 中的方法,我们执行跳转定义,就会调到 interface{} 定义的文件中。

    package main
    import (
        spwlt "dcos-webshell/studypkgs/wlt"
        spxm "dcos-webshell/studypkgs/xiaoming"
        "fmt"
    )
    
    func main() {
        tmp := spxm.NewXM("wang")
    
        fmt.Println("your name => ")
        tmp.Speak("9527")
        fmt.Println(tmp.Say("sober"))
    
        wlt := spwlt.NewWlt()
        wlt.Say("sober.wang")
        wlt.Speak("wangshen")
    }
    

    这个时候你需要像下面这样定义你的包

    └── studypkgs
        ├── stady_pkgs.go // 这里定义接口
        ├── wlt
        │   └── wlt.go // 这里实现接口的不同方式
        └── xiaoming
            └── xiaoming.go
    

    社区中的例子

    一个非常棒的值得学习的项目:

    https://github.com/abronan/valkeyrie
    

    公众号_Golang简洁架构实战
    博客_Golang简洁架构实战

  • 相关阅读:
    ext与xfs文件系统比较与总结
    MySQL prepare 原理
    MySQL 性能监控 4 大指标
    MySQL数据库设计规范
    What To Do When MySQL Runs Out of Memory: Troubleshooting Guide
    MySQL 8.0 —— CATS事务调度算法的性能提升
    MySQL5.7中的sql_mode默认值
    MySQL8.0——Resource Group(资源组)
    MySQL 8.0 —— 数据字典
    mysqlreport工具
  • 原文地址:https://www.cnblogs.com/shangmo/p/15769228.html
Copyright © 2011-2022 走看看