zoukankan      html  css  js  c++  java
  • Go基础---->go的基础学习(三)

      这里面我们简单的介绍go中面向对象编程的知识。

    Go的面向对象编程

    一、为类型添加方法

    package main
    
    import "fmt"
    
    type Integer int
    
    // 面向对象
    func (a Integer) Less(b Integer) bool {
        return a < b
    }
    
    // 面向过程
    func Integer_Less(a Integer, b Integer) bool {
        return a < b
    }
    
    func main() {
        var a Integer = 1
        if a.Less(2) {
            fmt.Println(a, "Less 2") // 1 Less 2
        }
        if Integer_Less(a, 2) {
            fmt.Println(a, "Less 2") // 1 Less 2
        }
    }

    二、go中的函数传值问题

    package main
    
    import "fmt"
    
    type Integer int
    
    func (a *Integer) Add1(b Integer) {
        *a += b    
    }
    
    func (a Integer) Add2(b Integer) {
        a += b
    }
    
    func main() {
        var a, b Integer = 2, 7
        a.Add2(b)
        fmt.Println(a, b) // 2, 7
    
        a.Add1(b)
        fmt.Println(a, b) // 9, 7
    }

    Go语言中的大多数类型都基于值语义:

    • 基本类型,如 byte、int、bool、float32、float64 和 string 等;
    • 复合类型,如数组(array)、结构体(struct)和指针(pointer)等。

     三、go中的结构休

    package main 
    
    import "fmt"
    
    type Rect struct {
        width, height float64
    }
    
    func (r *Rect) Area() float64 {
        return r.width * r.height
    }
    
    func main() {
        // 创建的几种方式
        rect1 := &Rect{100, 50}
        rect2 := &Rect{ 100, height: 200}
        rect3 := new(Rect)
        rect3.height, rect3.width = 90, 20
        rect4 := &Rect{}
        rect4.height, rect4.width = 90, 20
    
        fmt.Println(rect1.Area()) // 5000
        fmt.Println(rect2.Area()) // 20000
        fmt.Println(rect3.Area()) // 1800
        fmt.Println(rect4.Area()) // 1800
    }

    四、go中的接口

    由于Go语言中任何对象实例都满足空接口 interface{} ,所以 interface{} 看起来像是可以指向任何对象的 Any 类型。

    package main 
    
    import "fmt"
    
    // 定义一个接口Men
    type Men interface {
        sayHello()
    }
    
    type Sing interface {
        sing(name string)
    }
    
    // 接口的组合
    type MenAndSing interface {
        Sing
        Men
    }
    
    type Human struct {
        name, address string
        age int
    }
    
    type Person struct {
        Human
        phone string
    }
    
    // Huamn实现了sayHello方法
    func (human Human)sayHello() {
        fmt.Println("human say hello")
    }
    
    // Huamn实现了sing方法
    func (human Human)sing(name string) {
        fmt.Println("human sing a song named ", name)
    }
    
    // Person重写方法
    func (p Person)sayHello() {
        fmt.Println("Person say Hello")
    }
    
    func main() {
        mark := Human{"huhx", "address", 45}
        var men Men = mark
        men.sayHello() // 
    
        var sing Sing = mark // 由于Human实现了Sing的sing方法 
        sing.sing("huhx")
    
        var men2 Men = Person{mark, "15527100207"}
        men2.sayHello()
    
        var menAdnstring MenAndSing = mark
        menAdnstring.sayHello()
        menAdnstring.sing("huhx")
    }

    友情链接

  • 相关阅读:
    第六天20160802
    第五天20160801
    关于表单元素input的美化
    关于Oracle默认用户名system密码不正确登录不上解决方案
    ORCALE安装教程
    [INS-32021]此卷上用于所选Oracle主目录的磁盘空间不足
    Linux下利用nc命令传输文件
    golang与 postgresql简单的增删改查
    Golang 调用 C/C++,例子式教程
    c# EF中equal的用法注意
  • 原文地址:https://www.cnblogs.com/huhx/p/baseusego3.html
Copyright © 2011-2022 走看看