Go方法学习

面向对象

GO也支持面向对象编程,但是和传统的面向对象有区别,并不是纯粹的面向对象语言。所以我们说GO支持面向对象特性是比较准确的

GO没有类,Go语言的结构体(struct)和其他语言的类(Class)有同等地位,你也可以理解Golang是基于Struct来实现OOP概念的

go语言面向对象非常简洁,去掉了传统OOP语言的继承,方法重载,构造函数和析构函数等等

面向对象的三大特征:封装、继承、多态。go只支持封装。

方法:

在面向对象语言中,方法也就是类中的函数。但是由于Go语言其实明确的OOP的概念,Go中的类都是用结构体来实现的。

声明

方法的声明和函数也差不多,只是要指定下接收者而已

func (t T) F() {}

方法名是不能重复的,这就让GO的方法没有了重载的特性

示例:

package main  
  
import "fmt"  
  
type Student struct {  
}  
  
func (s Student) sayhello() {  
   fmt.Println("hello student and method")  
  
}  
func main() {  
   s := Student{}  
   s.sayhello()  
   }

输出:

hello student and method

方法名和字段名是不能一样的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AONZdWUb-1673322680952)(…/images/Pasted%20image%2020230109205114.png)]
想要修改结构体中的值修改,要传入指针

package main  
  
import "fmt"  
  
type Student struct {  
   name string  
   age  int  
}  
  
func (s Student) sayhello() {  
   fmt.Println("hello student and method")  
  
}  
  
//func (s Student) name() {  
//  
//}  
  
func (s Student) addAge() {  
   s.age += 1  
}  
func (s Student) printAge() {  
   fmt.Println(s.name, "的年龄是:", s.age)  
}  
func main() {  
   s := Student{"simple", 18}  
   s.sayhello()  
   s.addAge()  
   s.printAge()  
  
}

输出:
hello student and method
simple 的年龄是: 18

没有加一
所以这里是值传入,只是一个copy,要想修改年龄,要传入指针

package main  
  
import "fmt"  
  
type Student struct {  
   name string  
   age  int  
}  
  
func (s Student) sayhello() {  
   fmt.Println("hello student and method")  
  
}  
  
//func (s Student) name() {  
//  
//}  
  
func (s *Student) addAge() {  
   s.age += 1  
}  
func (s Student) printAge() {  
   fmt.Println(s.name, "的年龄是:", s.age)  
}  
func main() {  
   s := Student{"simple", 18}  
   s.sayhello()  
   s.addAge()  
   s.printAge()  
  
}

输出:
hello student and method
simple 的年龄是: 19

down
🥱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值