go语言-面向对象之包和封装(十一)

封装

1. 名字一般使用CamelCase
2. 首字母大写:public
3. 首字母小写: private 


1. 为结构定义的方法必须放在同一个包内
2. 可以是不同文件

package queues


type Quene []int

func (q *Quene) AddQuene(val int)  {
	*q = append(*q, val)
}

func (q *Quene) Pop() int  {
	head := (*q)[0]
	*q = (*q)[1:]
	return head
}

func (q *Quene) IsEnpty() bool  {
	return len(*q) == 0
}

 

package main

import (
	"fmt"
	"GoHeloWorld/quence/queues"
)

func main() {


	q := queues.Quene{1}

	q.AddQuene(2)
	q.AddQuene(3)

	fmt.Println()

	if q.IsEnpty() {
		fmt.Printf("q is Empty")
	} else {
		fmt.Printf("q=%d", q.Pop())
	}

	fmt.Println()

	if q.IsEnpty() {
		fmt.Printf("q is Empty")
	} else {
		fmt.Printf("q=%d", q.Pop())
	}
}

在go语言中,可以给任意自定义类型(包括内置类型,但不包括指针类型)添加相应的方法

方法总是半丁对象实例,并将实例作为第一实参(receiver),方法的语法如下;

func (receiver ReciverType)  funcName(parameters) (results)

1. 参数receiver可以任意命名,如方法中未曾使用,可省略参数名

2. 参数receiver类型可以是T或者*T, 基类型T不能是接口或指针

//point为接受者类型,它本身不能是指针类型
//type point *int 
//func (tmp point) Add03(other point) point  {
//}

3. 不支持重载方法,也就是说,不能定义名字相同但是不同参数的方法

//面向过程
func Add01(a, b int) int {
	return a + b
}

//面向对象,方法:给某个类型绑定一个函数
type long int

//tmp叫接收者,接收者就是传递的一个参数
func (tmp long) Add02(other long) long  {
	return tmp + other
}

func main() {
	var result int
	result = Add01(1, 2) //普通函数调用方式
	fmt.Println("result = ", result)

	//定义一个变量
	var a long = 2
	//调用方式格式: 变量名,函数(所需参数)
	r := a.Add02(2)
	fmt.Println("r = ", r)

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值