Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了golang学习笔记[2] 面向对象OOP大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
// 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,height}
}

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

//为Base@L_618_6@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@L_618_6@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
}
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,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,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,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

大佬总结

以上是大佬教程为你收集整理的golang学习笔记[2] 面向对象OOP全部内容,希望文章能够帮你解决golang学习笔记[2] 面向对象OOP所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。