Go的学习旅程3:面向对象

1.结构体和方法

在go中,是没有类class的定义的,但是类似于class的是type

package main  
  
import (  
    "fmt"  
)  
  
//定义一个类  
type person struct {  
    name string  
    age  int  
    tel  int  
}  
  
//构造函数  
func con(name string, age, tel int) *person {  
    return &person{name, age, tel}  
}  
  
//方法  
func (aaa person) fanfa() {  
    fmt.Println(aaa.tel * aaa.age)  
}  
  
//修改person中的name,但不就该原数据  
func (aaa person) update_name(name string) person {  
    aaa.name = name  
    return aaa  
}  
  
//修改person中的name,也修改原数据  
func (aaa *person) update(name string) person {  
    //指针下的name,落脚点是name,name并不是指针  
    aaa.name = name  
    return *aaa  
}  
  
func main() {  
    //实例化类1  
    var a person  
    a.tel = 15888888888  
    //实例化类2  
    b := person{name: "王八", age: 18, tel: 18566654124}  
    //实例化类3  
    c := person{"张二", 19, 15888888888}  
    fmt.Println(a, b, c)  
  
    //调用类中的方法  
    c.fanfa()  
    //修改现数据  
    fmt.Println("这是现在的name:", c.update_name("狗儿"))  
    //修改原数据  
    c.update("二比")  
    fmt.Println("这是原来的name:", c)  
}  


结果展示:



2.包的封装,实现面向对象

        2.1包的逻辑关系图

        

        2.2利用entry.go调用tree包,实现对tree包下,node.go和node1.go的调用

        

    node.go

package tree

//定义一个类
type Person struct {
	Name string
	Age  int
	Tel  int
}


//修改Person中的Name,但不就该原数据
func (aaa Person) Update_name(Name string) Person {
	aaa.Name = Name
	return aaa
}

//修改Person中的Name,也修改原数据
func (aaa *Person) Update(Name string) Person {
	//指针下的Name,落脚点是Name,Name并不是指针
	aaa.Name = Name
	return *aaa
}

    node1.go

扫描二维码关注公众号,回复: 1097843 查看本文章
package tree

import "fmt"

//构造函数
func Con(Name string, Age, Tel int) *Person {
	return &Person{Name, Age, Tel}
}

//方法
func (aaa Person) Fanfa() {
	fmt.Println(aaa.Tel * aaa.Age)
}


entry.go

package main

import (
	"../tree"
	"fmt"
)

func main() {
	//实例化类1
	var a tree.Person
	a.Tel = 15888888888
	//实例化类2
	b := tree.Person{Name: "王八", Age: 18, Tel: 18566654124}
	//实例化类3
	c := tree.Person{"张二", 19, 15888888888}
	fmt.Println(a, b, c)

	//调用类中的方法
	c.Fanfa()
	//修改现数据
	fmt.Println("这是现在的Name:", c.Update_name("狗儿"))
	//修改原数据
	c.Update("二比")
	fmt.Println("这是原来的Name:", c)
}


通过运行entry.go实现调用tree,效果如下:










猜你喜欢

转载自blog.csdn.net/feiwutudou/article/details/80418247
今日推荐