1.方法

  方法类似函数 ,多了一个接收者 ,接收者是指针指向结构体(也可以是值) ,方法与结构体绑定 (可以理解为模板定义方法) ,方法位于结构体内部

  方法集可以理解就是多个方法

  可以组合其他结构体方法 ,直接将其他结构体类型放入属性

2.创建方法

  接收者指定好对应的结构体 ,可以直接引用结构体内的所有属性和方法

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Ven struct {
  6. Name string
  7. address string
  8. }
  9.  
  10. func (v *Ven) Name_info() string {
  11. return "公司名称" + v.Name
  12. }
  13.  
  14. func (v *Ven) Address_info() string {
  15. return fmt.Sprintf(",公司地址%v", v.address)
  16. }
  17.  
  18. func (v *Ven) Info() string {
  19. return v.Name_info() + v.Address_info()
  20. }
  21.  
  22. func main() {
  23. a1 := Ven{
  24. Name: "亚马逊",
  25. address: "美国",
  26. }
  27.  
  28. fmt.Println(a1.Info())
  29. }

3.使用方法与指针

  希望方法修改实例内部 ,方法定义指针接收者

  希望方法不修改实例 ,方法定义值接收者

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Ven struct {
  6. Name string
  7. address string
  8. remarks string
  9. }
  10.  
  11. func (v *Ven) Name_info() string {
  12. return "公司名称" + v.Name
  13. }
  14.  
  15. func (v *Ven) Edit_remarks(in string) {
  16. v.remarks = in
  17. }
  18.  
  19. func (v Ven) Edit_remarks1(in string) { //值引用无法做用实例
  20. v.remarks = in
  21. }
  22.  
  23. func main() {
  24. a1 := Ven{
  25. Name: "亚马逊",
  26. address: "美国",
  27. }
  28.  
  29. fmt.Println("备注",a1.remarks)
  30. a1.Edit_remarks("亚马逊商城退出中国")
  31. fmt.Println("备注",a1.remarks)
  32. a1.Edit_remarks1("亚马逊进入中国") //值引用无法做用到a1实例
  33. fmt.Println("备注",a1.remarks)
  34.  
  35. }

4.接口

  接口指定了方法集中所有方法的规范 ,但不实现

  接口指定方法的函数签名部分

  接口可以实现代码重用和完全替换实现

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type DB_inter interface {
  6. Read() string
  7. Write() string
  8. }
  9.  
  10. type RW struct {
  11. }
  12.  
  13. func (r *RW) Read() string {
  14. return "读取数据"
  15. }
  16.  
  17. func (r *RW) Write() string {
  18. return "写入数据"
  19. }
  20.  
  21. type Mysql struct {
  22. Name string
  23. RW //继承方法 ,实现了接口
  24. }
  25.  
  26. type Postgre struct {
  27. Name string
  28. RW //继承方法 ,实现了接口
  29. }
  30.  
  31. //接口函数
  32. func R(obj DB_inter) string {
  33. return obj.Read()
  34. }
  35.  
  36. func W(obj DB_inter) string {
  37. return obj.Write()
  38. }
  39.  
  40. func main() {
  41. mysql := Mysql{Name: "mysql数据库"}
  42. pg := Postgre{Name: "pg数据库"}
  43.  
  44. fmt.Println(R(&mysql)) //此处必须使用指针
  45. fmt.Println(R(&pg)) //此处必须使用指针
  46.  
  47. }

 

golang-方法和接口的更多相关文章

  1. golang方法和接口

    一.  go方法 go方法:在函数的func和函数名间增加一个特殊的接收器类型,接收器可以是结构体类型或非结构体类型.接收器可以在方法内部访问.创建一个接收器类型为Type的methodName方法. ...

  2. GoLang之方法与接口

    GoLang之方法与接口 Go语言没有沿袭传统面向对象编程中的诸多概念,比如继承.虚函数.构造函数和析构函数.隐藏的this指针等. 方法 Go 语言中同时有函数和方法.方法就是一个包含了接受者的函数 ...

  3. Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现

    前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...

  4. Go 语言中的方法,接口和嵌入类型

    https://studygolang.com/articles/1113 概述 在 Go 语言中,如果一个结构体和一个嵌入字段同时实现了相同的接口会发生什么呢?我们猜一下,可能有两个问题: 编译器会 ...

  5. Go 语言入门(二)方法和接口

    写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(二 ...

  6. Go语言_方法和接口

    方法和接口 本节课包含了方法和接口,可以用这种构造来定义对象及其行为. Go 作者组编写,Go-zh 小组翻译. https://tour.go-zh.org/methods/1 方法 Go 没有类. ...

  7. 带你学够浪:Go语言基础系列 - 10分钟学方法和接口

    文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 对于一般的语言使用者来说 ,20% 的语言特性就能够满 ...

  8. C#属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-

    1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...

  9. jbuilder的set!方法重构接口

    https://github.com/rails/jbuilder  的set!方法重构接口, 因为grape没法使用 jBuilder 的缓存,所以直接用 Rails 写 API (1)多个图片 i ...

  10. 使用 highchart 绘制柱状图的通用方法与接口

    本文给出使用 highchart 绘制柱状图的通用方法与接口, 只要指定相应的数据结构和配置, 就可以直接拿来使用. 一.  数据结构与基本接口   一般绘制图形, 会涉及到较复杂的数据结构, 比如使 ...

随机推荐

  1. Git详细教程之创建本地仓库和连接Github仓库

    首先要知道不只有代码,任何类型的文件都可以进行版本控制,版本控制很重要的一个特性就是你可以随时修改,比如git会记录你的任何操作,如果你想要回退到任何一个历史操作,你可以通过git轻松达到. 本地仓库 ...

  2. Spring cloud ——EurekaServer

    Eureka作为服务注册与发现的组件,Eureka2.0已经闭源了,但是本教程还是以Eureka为核心进行展开. 1.三个模块 Spring Cloud Eureka是Spring Cloud Net ...

  3. CentOS 7上的系统管理之:Systemd和systemctl

    参考资料: Chapter 10. Managing Services with systemd Red Hat Enterprise Linux 7 | Red Hat Customer Porta ...

  4. 数据卷(Data Volumes)

    Docker宿主机和容器之间文件拷贝docker copy 前言: Docker 数据管理 在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行 数据共享,这必然涉及 ...

  5. 分布式Redis的分布式锁 Redlock

    链接 Distributed locks with Redis 引言 之前自己在用redis来实现分布式锁的时候都是基于单个Redis实例,也就是说Redis本身是有单点故障的,Redis的官方文档介 ...

  6. 求连通块个数 - BFS、DFS、并查集实现

    本文基于leetcode的200.岛屿数量(题目

  7. 【戾气满满】Ubuntu 18.04使用QT通过FreeTDS+unixODBC连接MSSQL填坑记(含泪亲测可用)

    前言 照例废话几句,想玩下QT,但是学习吧总得想点事情做啊,单纯学习语法用法这些?反正我是学不下去的,脑袋一拍,就先学下怎么连接数据库吧!然而万万没想到,我这是给自己挖了一个深深的坑啊! 学习自然去官 ...

  8. 在IIS上部署 .Net Core 3.0 项目踩坑实录

    在IIS上部署 .Net Core 3.0 项目的主要流程有: 安装并启用IIS 安装AspNetCoreModuleV2 添加.配置网站 设置应用程序池 通过VS发布 一.安装并启用IIS: 安装了 ...

  9. Linux汇总

    Linux介绍以及VMware和Centos的安装 linux-VMtools安装 linux-创建/使用快照/克隆(类似windows中备份还原) linux目录结构 linux指令大全(归类整理) ...

  10. springboot向elk写日志

    springboot里连接elk里的logstash,然后写指定index索引的日志,而之后使用kibana去查询和分析日志,使用elasticsearch去保存日志. 添加引用 implementa ...