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 绘制柱状图的通用方法与接口, 只要指定相应的数据结构和配置, 就可以直接拿来使用. 一. 数据结构与基本接口 一般绘制图形, 会涉及到较复杂的数据结构, 比如使 ...
随机推荐
- 关于选用ccflow你所担心的问题都在这里为您解答
致ccflow客户 感谢大家ccbpm的认可,我们会一如既往的以踏实的技术来回应大家的支持. 针对大家疑问最多的几个问题,在这里我我为大家一一解答. 代码一直在更新,不稳定问题 版本控制我们做的差,是 ...
- Sqlite—查询语句(Select)
基本语法如下 sqlite> select * from tb_user; sqlite> select userid,username from tb_user; 格式化的查询输出 sq ...
- <计算机系统结构中的8个伟大思想>
摘自<计算机组成与设计>戴维帕森 ——面向摩尔定律的设计 ——使用抽象简化设计 ——加速大概率事件 ——通过并行提高性能 ——通过流水线提高性能 ——存储器层次 ——通过冗余提高可靠性
- Often Misused:Spring Remote Service 经常被误用:Spring远程服务
- C# copy source directory files with original folder to the destination path
private static void PathCopyFilesWithOriginalFolder() { ; try { string sourceDir = @"E:\Source& ...
- 设计模式之观察者模式C#实现
说明:主要参考<Head First设计模式(中文版)>,使用C#代码实现. 代码:Github 1.观察者模式UML图 2.气象监测类图 3.气象监测代码(书中C#版) 3.1 Obse ...
- 43.QT-访问远程SQLite数据库
在上章42.QT-QSqlQuery类操作SQLite数据库(创建.查询.删除.修改)详解学习了如何操作SQLite,本章来学习如何访问远程SQLite 1.首先设置共享,映射(用来实现远程访问) 将 ...
- docker下MySQL的主从复制
MySql的主从复制 sudo docker pull MySQL:5.7 拉取MySQL的镜像文件(版本号为 5.7) sudo docker run -p 3339:3306 --name mas ...
- 一个diango项目的结构
一个项目的结构 day43项目 .idea 配置 pycharm自动帮配的配置,打开别人的diango项目时要先删了此项 app01 方便在一个大的Django项目中,管理实现不同的业务功能 migr ...
- 一条简单的更新语句,MySQL是如何加锁的?
看如下一条sql语句: # table T (id )) delete : MySQL在执行的过程中,是如何加锁呢? 在看下面这条语句: : 那这条语句呢?其实这其中包含太多知识点了.要回答这两个问题 ...