go语言学习初探(三)面向对象编程

滞空枚举
• 阅读 1466
类型系统

继承

package main

import (
    "fmt"
)

type Integer int

func (a Integer) Less(b Integer) bool {
    return a > b
}

func main() {
    var integer Integer = 1
    fmt.Println(integer.Less(0))
}
// print -> true

指针运算符 *

package main

import (
    "fmt"
)

type Person struct {
    Id   string
    Name string
}

func main() {
    p1 := Person{"1", "张三"}
    p2 := &p1
    p1.Id = "2"
    fmt.Println(p1, *p2)
}
// print -> {2 张三} {2 张三}

取址符 &

package main

import (
    "fmt"
)

type Person struct {
    Id   string
    Name string
}

func main() {
    p1 := Person{"1", "张三"}
    p2 := &p1
    p1.Id = "2"
    fmt.Println(p1, p2)
}
// print -> {2 张三} &{2 张三}

   &取址可以让p1与p2共享同一块数据内存,从而在修改的时候p1与p2的结果相同。

非取址

package main

import (
    "fmt"
)

type Person struct {
    Id   string
    Name string
}

func main() {
    p1 := Person{"1", "张三"}
    p2 := p1
    p1.Id = "2"
    fmt.Println(p1, p2)
}
// print -> {2 张三} {1 张三}

   Go 语言的基本类型在赋值的时候,实际上是值传递,包括复合类型,这点与其他的面向对象语言方式不同,需要在开发的时候额外注意。

数组切片、map、channel、interface

数组切片

package main

import (
    "fmt"
)

func main() {
    a1 := []int{1, 2, 3}
    a2 := a1
    a1[0] = 10
    fmt.Println(a1, a2)
}
// print -> [10 2 3] [10 2 3]

map

package main

import (
    "fmt"
)

func main() {
    m1 := map[string]string{"1": "hi"}
    m2 := m1
    m1["1"] = "ok"
    fmt.Println(m1, m2)
}
// print -> map[1:ok] map[1:ok]

channel

inteface

interface 接口

package main

import (
    "fmt"
)

type Person struct {
    Name string
}

func (p *Person) Find() {
    fmt.Println("find person")
}

type IFind interface {
    Find()
}

type IString interface {
    String()
}

func main() {
    var f IFind = new(Person)
    f.Find()
}
// print -> find person
interface
package main

import (
    "fmt"
)

type Integer int

func (a Integer) Less(b Integer) bool {
    return a < b
}

func (a Integer) Add(b Integer) {
    a += b
}

type LessAdder interface {
    Less(b Integer) bool
    Add(b Integer)
}

func main() {
    var a Integer = 1
    var b LessAdder = a
    fmt.Println(a, b)
}
// print -> 1 1
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
typeScript数据类型
//布尔类型letisDone:booleanfalse;//数字类型所有数字都是浮点数numberletdecLiteral:number6;lethexLiteral:number0xf00d;letbinaryLiteral:number0b101
九路 九路
4年前
一篇文章彻底弄懂go语言方法的本质
Go语言不支持经典的面向对象语法元素,比如:类、对象、继承等。但Go语言也有方法(method)。和函数相比,Go语言中的方法在声明形式上仅仅多了一个参数,Go称之为receiver参数。而receiver参数正是方法与类型之间的纽带。Go方法的一般声明形式如下:gofunc(receiverT/T)MethodName(参数列表)
三十分钟入门基础Go(Java小子版)
本篇文章适用于学习过其他面向对象语言(Java、Php),但没有学过Go语言的初学者。文章主要从Go与Java功能上的对比来阐述Go语言的基础语法、面向对象编程、并发与错误四个方面。
Wesley13 Wesley13
3年前
Go之面向对象编程之继承
Golang的继承与java和php不太一样,如php继承需要用到extends关键字,而Golang使用的是匿名继承或有名继承。二:简单举例packagemainimport("fmt")typeBrandstruct{Namestring}
Wesley13 Wesley13
3年前
JS实现继承的几种方式
前言JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么如何在JS中实现继承呢?让我们拭目以待。JS继承的实现方式既然要实现继承,那么首先我们得有一个父类,代码如下://定义一个动物类functionAnimal(name){//属性this.name
Wesley13 Wesley13
3年前
JS必知的6种继承方式
JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么如何在JS中实现继承呢?让我们拭目以待JS继承的实现方式既然要实现继承,那么首先我们得有一个父类,代码如下:// 父类function Person(name) { // 给构造函数添加了参数  this.name  name;
Wesley13 Wesley13
3年前
Go接口
Go接口的定义Go语言不是一种 _“传统”_ 的面向对象编程语言:它里面没有类和继承的概念。但是Go语言里有非常灵活的 接口(Interfacesarenamedcollectionsofmethodsignatures) 概念,通过它可以实现很多面向对象的特性。接口提供了一种方式来 说明 对象的
滞空枚举
滞空枚举
Lv1
看不清的挽留,正如你执着地向前走
文章
4
粉丝
0
获赞
0