zoukankan      html  css  js  c++  java
  • golang-方法和接口

    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 }
    View Code

    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 }
    View Code

    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 }
    View Code

     

  • 相关阅读:
    sql函数
    sql日期
    Windows下串口编程
    Libreoffice/Office:禁止首字母自动大写功能
    convert:图片转pdf失败
    LibreOffice/Calc:单元格设置下拉菜单
    Ubuntu:查询计算机软硬件信息
    tar:文件打包归档
    中科大自主招生2018年笔试数学之五
    文件分割与合并
  • 原文地址:https://www.cnblogs.com/quguanwen/p/11754495.html
Copyright © 2011-2022 走看看