对 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】