golang-方法和接口
1.方法
方法类似函数 ,多了一个接收者 ,接收者是指针指向结构体(也可以是值) ,方法与结构体绑定 (可以理解为模板定义方法) ,方法位于结构体内部
方法集可以理解就是多个方法
可以组合其他结构体方法 ,直接将其他结构体类型放入属性
2.创建方法
接收者指定好对应的结构体 ,可以直接引用结构体内的所有属性和方法
package main
import "fmt"
type Ven struct {
Name string
address string
}
func (v *Ven) Name_info() string {
return "公司名称" + v.Name
}
func (v *Ven) Address_info() string {
return fmt.Sprintf(",公司地址%v", v.address)
}
func (v *Ven) Info() string {
return v.Name_info() + v.Address_info()
}
func main() {
a1 := Ven{
Name: "亚马逊",
address: "美国",
}
fmt.Println(a1.Info())
}
3.使用方法与指针
希望方法修改实例内部 ,方法定义指针接收者
希望方法不修改实例 ,方法定义值接收者
package main
import "fmt"
type Ven struct {
Name string
address string
remarks string
}
func (v *Ven) Name_info() string {
return "公司名称" + v.Name
}
func (v *Ven) Edit_remarks(in string) {
v.remarks = in
}
func (v Ven) Edit_remarks1(in string) { //值引用无法做用实例
v.remarks = in
}
func main() {
a1 := Ven{
Name: "亚马逊",
address: "美国",
}
fmt.Println("备注",a1.remarks)
a1.Edit_remarks("亚马逊商城退出中国")
fmt.Println("备注",a1.remarks)
a1.Edit_remarks1("亚马逊进入中国") //值引用无法做用到a1实例
fmt.Println("备注",a1.remarks)
}
4.接口
接口指定了方法集中所有方法的规范 ,但不实现
接口指定方法的函数签名部分
接口可以实现代码重用和完全替换实现
package main
import "fmt"
type DB_inter interface {
Read() string
Write() string
}
type RW struct {
}
func (r *RW) Read() string {
return "读取数据"
}
func (r *RW) Write() string {
return "写入数据"
}
type Mysql struct {
Name string
RW //继承方法 ,实现了接口
}
type Postgre struct {
Name string
RW //继承方法 ,实现了接口
}
//接口函数
func R(obj DB_inter) string {
return obj.Read()
}
func W(obj DB_inter) string {
return obj.Write()
}
func main() {
mysql := Mysql{Name: "mysql数据库"}
pg := Postgre{Name: "pg数据库"}
fmt.Println(R(&mysql)) //此处必须使用指针
fmt.Println(R(&pg)) //此处必须使用指针
}
golang-方法和接口的更多相关文章
- golang方法和接口
一. go方法 go方法:在函数的func和函数名间增加一个特殊的接收器类型,接收器可以是结构体类型或非结构体类型.接收器可以在方法内部访问.创建一个接收器类型为Type的methodName方法. ...
- GoLang之方法与接口
GoLang之方法与接口 Go语言没有沿袭传统面向对象编程中的诸多概念,比如继承.虚函数.构造函数和析构函数.隐藏的this指针等. 方法 Go 语言中同时有函数和方法.方法就是一个包含了接受者的函数 ...
- Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现
前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...
- Go 语言中的方法,接口和嵌入类型
https://studygolang.com/articles/1113 概述 在 Go 语言中,如果一个结构体和一个嵌入字段同时实现了相同的接口会发生什么呢?我们猜一下,可能有两个问题: 编译器会 ...
- Go 语言入门(二)方法和接口
写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(二 ...
- Go语言_方法和接口
方法和接口 本节课包含了方法和接口,可以用这种构造来定义对象及其行为. Go 作者组编写,Go-zh 小组翻译. https://tour.go-zh.org/methods/1 方法 Go 没有类. ...
- 带你学够浪:Go语言基础系列 - 10分钟学方法和接口
文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 对于一般的语言使用者来说 ,20% 的语言特性就能够满 ...
- C#属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-
1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...
- jbuilder的set!方法重构接口
https://github.com/rails/jbuilder 的set!方法重构接口, 因为grape没法使用 jBuilder 的缓存,所以直接用 Rails 写 API (1)多个图片 i ...
- 使用 highchart 绘制柱状图的通用方法与接口
本文给出使用 highchart 绘制柱状图的通用方法与接口, 只要指定相应的数据结构和配置, 就可以直接拿来使用. 一. 数据结构与基本接口 一般绘制图形, 会涉及到较复杂的数据结构, 比如使 ...
随机推荐
- HttpRunner学习9--切换测试报告模板
前言 在HttpRunner中,给我们提供了 2 套测试报告模板,分别是 default_report_template.html 和 extent_report_template.html . 默认 ...
- 探索JAVA并发 - 可重入锁和不可重入锁
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- ArcGIS JS 4加载第三方矢量切片
现在矢量切片越来越普及,对于地图渲染能更轻更快.ArcGIS JS 4.13可以实现加载第三方矢量切片,以下为代码示例,最下方是我之前切的建筑物数据. 当切片大小在1M左右,加载效果还 ...
- .NET机器学习 ML.NET 1.4预览版和模型生成器更新
ML.NET 是面向.NET开发人员的开源和跨平台机器学习框架. ML.NET 还包括Model Builder (一个简单的UI工具)和 CLI ,使用自动机器学习(AutoML)构建自定义 ...
- C++之结构体特点
C++的结构体和C语言的结构体有什么不同 C++的结构体其实就是类的一种,只不过类成员默认访问权限是private,结构体默认访问权限是public. C语言的结构体是不能有函数的,而C++可以有. ...
- 查看python版本多少位的
正常我们在cmd终端输入python之后,如果有安装python,就会在回车之后出来关于你安装的python版本信息,几版本,多少位的,但是还有一种,像我这样只显示了python版本是3.7.5,并没 ...
- RDP矢量数据压缩算法
在绘制对象边缘时涉及到了这个算法,记录一下. 该算法递归进行,首先设定一个阈值,在点集的第一个点和最后一个点间拉一条线段,找出剩下的点集中离线段最远的一个点,如果该点到线段的距离小于阈值则舍弃中间的所 ...
- Windows服务安装批处理命令
Install.bat: @echo off "%~dp0InstallUtil\InstallUtil.exe" "%~dp0DataSyncService.exe&q ...
- jQuery实现下拉框默认选中
<form class="form-inline" method="post" action="/score_result/"> ...
- sleuth和zipkin微服务里的链路跟踪
分布式链路跟踪介绍 对于一个微服务系统,大多数来自外部的请求都会经过数个服务的互相调用,得到返回的结果,一旦结果回复较慢或者返回了不可用,我们就需要确定是哪个微服务出了问题.于是就有了分布式系统调用跟 ...