首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

go语言学习历程(21)

12.微博案例代码--基础篇

微博案例解析:

1.博主发布微博

2.粉丝管理

3.粉丝发布评论

4.博主查看评论

设计分析:

按照面对独享的思考方式,应该这样设计

1.博主一个类,为博主添加 增加博文 查看评论

2.粉丝一个类,发布评论。

3.博主和粉丝之间的交互方法,比如博主发布微博后,粉丝接到通知,粉丝可以选择关注和取消关注,博主可以查看自己被多少粉丝关注,粉丝可以随意查看自己关注了多少博主。

在此之间我们得重新复习下接口和结构体,和多态定义与实现:

packageGo_07

import"fmt"

typePerson_07interface{

SayHello()

}

typeStudent_07struct{

}

typeTeacher_07struct{

}

func(sStudent_07)SayHello() {

fmt.Println("老师好")

}

func(tTeacher_07)SayHello() {

fmt.Println("学生好")

}

funcText_07() {

// 这是平常的写法

varstuStudent_07

stu.SayHello()

varteacherTeacher_07

teacher.SayHello()

// 使用接口

varpersonPerson_07

person=&stu

person.SayHello()

person=&teacher

person.SayHello()

// 有一个弊端就是,接口中的方法必须全部用到,如果这里出现一个其他用不到的方法就会报错。

}

这里接口Person_07就相当于继承了Student_07结构体和Teacher_07结构体这2类,同样也就能使用这2类结构体的方法SayHello().

这里发现很麻烦对不对?创建接口的作用就是为了更方便的调用结构体方法,那么就为这个接口添加一个方法,与为结构体添加方法同理,为接口添加方法,来调用结构体方法,两者的区别精髓在于,结构体内存的是变量,接口内可存的方法,结构体中存变量,接口中不能存变量可以存方法。(注意!接口中的方法必须全部实现,有不实现的意味着没有继承这个接口。)

结构体:

//结构体Student类

typeStudentstruct{

 namestring

 ageint

 addressstring

}

//创建Student类对象切片 stu_01

varstu_01[]Student

//为结构体Student类添加方法

func(s*Student)Println_01() {

 fmt.Println(stu_01)

}

funcmain() {

 //为对象结构体类变量赋值

 stu_01=[]Student{name:"JOJO",age:19,address:"空调市"}

 //调用结构体的方法

 stu_01.Println_01()

}

接口:

//结构体

typeStudentstruct{

}

//结构体方法 Println_01()

func(s*Student)Println_01(){

}

//结构体方法 Scan_01()

func(s*Student)Scan_01(){

}

//创建一个接口

typeStudent_01interface{

 Println_01()

 Scan_01()

}

//为接口添加使用方法

funcSchool(h*Student_01){

 h.Println_01()

 h.Println_01()

}

funcmain() {

 //Student类对象

 varstuStudent

 //通过接口函数调用方法

 School(&stu)

}

再就空接口的使用方法,这个使用的方法就当作数组之于切片,数组长度固定,切片不固定,空接口不限定变量类型,结构体内的变量是固定的。

复习完这个知识点,现在来写博主,粉丝两大类。

博主类:

typeBloggerstruct{

Base//Id 和 Name 用来识别博主

WeiBos  []*PostContent//微博文章内容切片

Commentsmap[int][]*PostContent//某篇文章评论切片

// 评论内容,重点是区分属于哪个微博的

// value 表示具体的评论内容

}

//微博内容

//评论内容信息

typePostContentstruct{

Id         int     // 编号

Content   string   // 内容

CommentTimetime.Time// 时间

Type       int     // 类型

PostMan   string   // 发布人

To         string   // 给谁发布的

}

// 发布微博的方法的实现

// 第一个参数:表示微博的内容,第二个参数表示微博的类型

func(b*Blogger)PostWeiBo(contentstring,wbTypeint) {

// 1:创建PostContent对象

weibo:=new(PostContent)

// 2:成员初始化

weibo.Id=1

weibo.Content=content

weibo.Type=wbType

weibo.CommentTime=time.Now()//表示当前系统的时间

weibo.PostMan=b.Name

weibo.To="ALL"

// 3:存储微博数据

b.WeiBos=append(b.WeiBos,weibo)

for_,value:=rangeb.WeiBos{

fmt.Println(*value)

}

}

粉丝类:

typeFansstruct{

Base//Id 和 Name 用来识别粉丝

}

//关注了博主的粉丝

typeFriendlyFansstruct{

Fans

}

//没关注博主的粉丝

typeBadFansstruct{

Fans

}

肉眼可见的需要很多其他的功能,比如报错,这之后再说了,这也是属于教学步骤,先从最简单的做起,把博客教程写好,写明白再往上加。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201229A00XG600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券