分享
  1. 首页
  2. 文章

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

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

// 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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏