golang学习笔记[2] 面向对象OOP

zhouyunxuan · · 2389 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

// one project main.go
package main

import "fmt"

//为int类型起个别名Integer
type Integer int

func (a Integer) More(b Integer) Integer {
	return a - b
}

func Modify_arr(arr [3]int) {
	//数组是值类型,传进函数里面的是拷贝的那份
	arr[0] = 500
}
func Modify_slice(arr []int) {
	//切片是引用类型,传进函数里面可以直接修改
	arr[0] = 500
}

//定义Rect结构体
type Rect struct {
	x, y          float64
	width, height float64
}

//为Rect结构体增加计算面积的方法
func (r *Rect) Area() float64 {
	return r.width * r.height
}

//创建初始化Rect的函数
func NewRect(x, y, width, height float64) *Rect {
	return &Rect{x, y, width, height}
}

//声明Base
type Base struct {
	Name string
}

//为Base添加funca和funcb
func (base *Base) funca() {
	fmt.Println("funca")
}
func (base *Base) funcb() {
	fmt.Println("funcb")
}

//继承Base的Children
type Children struct {
	Base
	Son string
}

//为children添加funcc方法
func (children *Children) funcc() {
	fmt.Println("funcc")
}

//定义Flie结构体并实现四个方法
type File struct{}

func (f *File) Read(buf []byte) (n int, err error) {
	return n, err
}
func (f *File) Write(buf []byte) (n int, err error) {
	return n, err
}
func (f *File) Seek(off int64, whence int) (pos int64, err error) {
	return pos, err
}
func (f *File) Close() error {
	return nil
}

//接口
type IFile interface {
	Read(buf []byte) (n int, err error)
	Write(buf []byte) (n int, err error)
	Seek(off int64, whence int) (pos int64, err error)
	Close() error
}
type IReader interface {
	Read(buf []byte) (n int, err error)
}
type IWriter interface {
	Write(buf []byte) (n int, err error)
}
type IClose interface {
	Close() error
}

//接口赋值
func (a Integer) Less(b Integer) bool {
	return a < b
}
func (a *Integer) Add(b Integer) {
	*a += b
}

//定义接口LessAdder
type LessAdder interface {
	Less(b Integer) bool
	Add(b Integer)
}

func main() {
	//Integer拥有int类型所有的方法,且拥有int类型没有的Less和More方法
	var v1 Integer = 1
	//调用Interger的Less方法
	if v1.Less(50) {
		fmt.Println(v1, " less 50")
	}

	//测试数组
	v2 := [3]int{1, 2, 3}
	Modify_arr(v2)
	fmt.Println(v2) //[1 2 3]

	//测试切片
	v3 := []int{1, 2, 3}
	Modify_slice(v3)
	fmt.Println(v3) //[500 2 3]

	//测试new出来的结构体是什么类型
	testRect1 := new(Rect)
	testRect1.x = 500
	testRect2 := testRect1
	testRect2.x = 300
	fmt.Println(testRect1, testRect2) //&{300 0 0 0} &{300 0 0 0}

	//创建初始化Rect类型
	rect1 := new(Rect)
	fmt.Println(rect1)

	rect2 := &Rect{}
	fmt.Println(rect2)

	rect3 := &Rect{0, 0, 100, 200}
	fmt.Println(rect3)

	rect4 := &Rect{width: 200, height: 400}
	fmt.Println(rect4)

	rect5 := NewRect(20, 20, 200, 200)
	fmt.Println(rect5)

	//Base
	base1 := &Base{"yunxuan"}
	base1.funca()
	base1.funcb()

	children1 := &Children{*base1, "peixuan"}
	children1.funca()
	children1.funcc()

	/*
		实现了一个接口里面的方法就视为实现了这个接口
		File实现了这些接口
	*/
	var file1 IFile = new(File)
	file1.Close()
	var file2 IReader = new(File)
	file2.Read([]byte{})
	var file3 IWriter = new(File)
	file3.Write([]byte{})

	var v4 Integer = 1
	var v5 LessAdder = &v4
	v4.Add(v4)
	v5.Add(v4)

}




笔记出自于  http://blog.csdn.net/zhouyunxuan




有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:zhouyunxuan

查看原文:golang学习笔记[2] 面向对象OOP

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2389 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传