最新要闻
- 哔哩哔哩-W发布第二季度业绩 毛利润12亿元 同比增加66% 日均活跃用户同比增加15%至9650万户
- 「中国财富报道」宁德时代放大招
- 国际护士节的意义 国际护士节的意义是什么
- 通用汽车投资“人工智能”电池初创公司
- 龙高股份:2023年半年度净利润约5570万元 同比增加11.43%
- 一百八十二米! 黄河河南段塔高之最安罗高速黄河特大桥主塔封顶
- 英睿达 Pro 系列马甲内存降价:DDR5-5600 16G*2,599 元
- 美容仪真的值得买吗?Tripollar和宙斯哪个更热门?
- 墓园贿赂中间人介绍死者家属买墓地,回扣高达墓地价款的15%,市监局:没收违法所得,罚款30万元
- 5399元起 科沃斯地宝X2发布:8000Pa吸力超大吸力
- TFBOYS粉丝怎么跟考研老哥掐起来了?
- 南极惊现20只触手的“海怪”!为啥深海动物都胡乱长?
- AMD Zen5跑分逆天!Zen架构诞生以来最大飞跃
- SpaceX成功发射第99批星链卫星:总数已达4962颗
- 动物保护自己的方法视频(动物保护自己的方法)
- 机构预估今年手机出货量创十年新低,苹果有望问鼎出货量第一宝座
广告
手机
2023武汉美容美发博览会在哪里举办?
2023杨千嬅佛山演唱会入场须知(时长+入场)
- 2023武汉美容美发博览会在哪里举办?
- 2023杨千嬅佛山演唱会入场须知(时长+入场)
- 优化消费政策精准服务新市民
- 8月16日基金净值:景顺长城内需贰号混合最新净值1.306,涨0.08%
- 遗失物还拥有所有权吗
- 湖南省益阳市市场监管局公示102批次“你点我检”食品安全专项抽检情况
家电
【Go语言】面向对象编程
(资料图片)
一、面向对象编程概念
面向过程编程
- 整个过程分为若干步
- 每一步对应一个函数
- 函数之间要传递大量参数
范例:
package mainimport ( "errors" "fmt" "strconv")// 用户登录,获取信息,更新信息,列出信息var message = "This is old message"func login(username string) (value int, isLogin bool, err error) { if username == "" { err = errors.New("user login faild") value = -1 isLogin = false return } else { fmt.Println(username, "login successful") return 10, true, nil }}func getInfo(isLogin bool) (value *string, err error) { if isLogin { fmt.Println(message) return &message, nil } else { return nil, errors.New("user not login") }}func updateInfo(userid int, isLogin bool, message *string, newInfo string) (err error) { if userid != -1 && isLogin { *message = strconv.Itoa(userid) + " modified to " + newInfo fmt.Println("message update to ", *message) return nil } else if userid == -1 || !isLogin { return errors.New("user not login") } else { return errors.New("Message is nil") }}func main() { uid, loginState, login_err := login("janzen") if login_err != nil { panic(login_err) } msg, get_err := getInfo(loginState) if get_err != nil { panic(get_err) } up_err := updateInfo(uid, loginState, msg, "New Message") if up_err != nil { panic(up_err) } fmt.Println(message)}输出结果:
PS F:\go\go_project\test> go run .\Function-oriented-programming\Function-oriented.gojanzen login successfulThis is old messagemessage update to 10 modified to New Message10 modified to New Message
面向对象编程
- 把大量参数封装到结构体中
- 给结构体赋予方法,在成员方法内对结构体成员变量进行修改
- go语言面向对象的好处:打包参数、继承、面向接口编程
范例:
package mainimport ( "errors" "fmt" "strconv")var Message = "This is old message"type Client struct { UserName string Uid int LoginState bool}func Login(username string) (c *Client, err error) { if username == "" { err = errors.New("user login faild") c = nil return } else { fmt.Println(username, "login successful") c = &Client{username, 10, true} err = nil return }}func (c *Client) getInfo() (value *string, err error) { if c.LoginState { fmt.Println(Message) return &Message, nil } else { return nil, errors.New("user not login") }}func (c *Client) updateInfo(Message *string, newInfo string) (err error) { if c.Uid != -1 && c.LoginState && Message != nil { *Message = strconv.Itoa(c.Uid) + " modified to " + newInfo fmt.Println("message update to ", *Message) return nil } else if c.Uid == -1 || !c.LoginState { return errors.New("user not login") } else { return errors.New("Message is nil") }}func main() { c, login_err := Login("janzen") if login_err != nil { panic(login_err) } msg, get_err := c.getInfo() if get_err != nil { panic(get_err) } up_err := c.updateInfo(msg, "New Message") if up_err != nil { panic(up_err) } fmt.Println(Message)}输出结果:
PS F:\go\go_project\test> go run .\Object-oriented-programming\Object-oriented-programming.gojanzen login successfulThis is old messagemessage update to 10 modified to New Message10 modified to New Message
二、构造函数
type User struct { Name string Age uint8 Sex byte}func main () { u1 := User{} // 构造一个空User, 各字段取相应的数据类型的默认值 u2 = new(User) //构造一个空User,并返回该User结构体的指针}
自定义构造函数
type User struct { Name string Age int8 Sex byte}func NewUserDefault() *User { return &User{ Name: "", Age: -1, Sex: 3, }}func NewUser(name string, age int8,sex byte) *User { return &User{ Name: name, Age: age, Sex: sex, }}
单例模式
package mainimport "sync"var ( sUser *User uOnce sync.Once // 不同原子性操作,Once变量不可以共用,需要为每一个不同的原子性操作创建独立Once)func NewUserDefault() *User { return &User{ Name: "", Age: -1, Sex: 3, }}func NewUser(name string, age int8, sex byte) *User { return &User{ Name: name, Age: age, Sex: sex, }}func getUser() *User { uOnce.Do(func() { //sync.Onec.DO 可以确保在并发情况下,下方代码块在整个go进程中只会被执行一次,原子性执行 if sUser == nil { sUser = NewUserDefault() } }) return sUser}
三、继承与重写
继承
go语言设计思想中没有真正的继承关系
通过嵌入匿名结构体,变相实现实现“继承”的功能
范例:
type User struct { Name string Age int8 Sex byte}type Student struct { User Grade byte Class byte}func main() { u := User{"janzen", 21, 1} s := Student{u, 3, 1} fmt.Printf("sNmae = %s, sAge = %d, sClass = %d", s.Name, s.Age, s.Class)}输出结果:
PS F:\go\go_project\test> go run .\Constructor\Constructor.gosNmae = janzen, sAge = 21, sClass = 1
重写
func (user User) level() int { return 10}// 重写父类 User level方法func (student Student) level() int { return student.User.level() + 100 // 调用父类方法}
组合
type User struct { Name string Age int8 Sex byte}type Student struct { User Grade byte Class byte}// 通过组合使得 Persion 可以使用 User 和 Student 的全部方法和成员type Persion struct { User Student}
四、泛型
未使用泛型
未使用泛型不同数据类型之间不能直接进行逻辑运算,哪怕同为整型,int8 与 int16 也不能直接进行逻辑运算
func main() { aInt := int(8) bInt8 := int8(17) sumInt := aInt + bInt8}PS F:\go\go_project\test> go run .\FurnerStar\FurnerStar.go# command-line-argumentsFurnerStar\FurnerStar.go:22:12: invalid operation: aInt + bInt8 (mismatched types int and int8) c常用方式:
func AddString(a, b string) string { return a + b}func AddInt(a, b int) int { return a + b}func AddInt8(a, b int8) int8 { return a + b}func main() { var aInt,bInt int = 8,10 var aInt8,bInt8 int8 = 7,19 sumInt := AddInt(aInt, bInt) sumInt8 := AddInt8(aInt8, bInt8) sumStr := AddString("test ", "test2") fmt.Println(sumInt, sumInt8, sumStr)}使用泛型
type Addable interface { int|int8|int16|int32|int64| uint|uint8|uint16|uint32|uint64| float32|float64| string}func add[T Addable](a,b T)T{ return a+b}func main() { var aInt,bInt int = 8,10 var aInt8,bInt8 int8 = 7,19 sum1 := add(aInt,bInt) sum2 := add(aInt8,bInt8) sum3 := add("test ", "test2") fmt.Println(sum1,sum2,sum3)}
关键词:
【Go语言】面向对象编程
美媒:特朗普前律师“绝望地”呼吁特朗普支付法律费用
春风动力:上半年净利润同比增长80.41%
长海股份:2023年半年度净利润约2.1亿元,同比下降50.84%
刘强东夫妇“移民美国”?京东发声明称已报案
“无声”调解让聋哑人“听见”公平声音
汽车价格战又来了?特斯拉大幅降价,8月已有10品牌加入促销大战
市委书记秦保强、市长黄钫共同会见中国水电十一局党委书记、董事长张玉峰一行
人寿康宁重疾险怎么样?为什么停售了?
北汽蓝谷(600733.SH):子公司拟购买关联方福田汽车北京多功能厂设备类资产并实施产线技术改造
杜邦完成对Spectrum塑料集团的收购
《王者荣耀》好运宝箱/钥匙获得开启方法介绍
2023年角钢塔上市公司一览,角钢塔股票今日股价查询
大宗交易:爱尔眼科成交200.21万元,折价19.31%(08-17)
冯绍峰、蔡文静主演新剧《我和婚姻的战斗》杀青
以“天空视角” 看青山绿水内蒙古
“暑期经济”新玩儿法,你参与了哪个?
吉利银河L6预售开启 10万级插电混动车
2023KPL夏季赛:8月16日赛事简讯,积分榜排名最新情况
2023武汉美容美发博览会在哪里举办?
2023杨千嬅佛山演唱会入场须知(时长+入场)
天津警方通报"3名城管被捅伤":涉事摊主已被刑拘
深圳首座“御湖境”来了,开放当天上千人到访
2023年宁波余姚家电好物消费券可以在哪里领?
2023青岛多可艾克音乐节取消了吗?
太原国际通用航空飞行大会有没有免费的公交车过去?
中控技术董事长提议斥资0.5亿元至1亿元回购公司股份
哔哩哔哩-W发布第二季度业绩 毛利润12亿元 同比增加66% 日均活跃用户同比增加15%至9650万户
豪恩汽电(301488.SZ):公司产品在探测距离、低误判性、成像清晰度、稳定性及低延迟等技术方面有一定的优势
德赛西威上半年实现营业收入87.24亿元
“穿越机”惊现战场,乌克兰众筹购买1万架!俄乌冲突局势剧变!
东北受灾地区已转向灾后恢复重建阶段 多措并举减少灾害损失
暑假这里5000多名孩子不“孤泳”——江西南昌“娃娃学游泳”观察
沪市公司现回购潮:逾10家公司今晚推出回购计划
以权谋私 “靠林吃林” 东营市河口区孤岛刺槐林场建设发展服务中心原党组书记、主任,河口柽柳林场建设发展服务中心原党组书记、主任孙卫东被开除党籍和公职
央行:促进企业融资和居民信贷成本稳中有降
东方证券董事长金文忠:以财富转型践行金融为民 持续提升我国投资者获得感
运城市中心医院美容科好不好?大夫个人资料抢先一览
「中国财富报道」宁德时代放大招
华为长安二次牵手,华为与车企间能否诞生“第四种姿势”?
募资十亿引战7家,宝武集团旗下欧冶工业品混改提速
华东医药恢复双位数增长 医美板块增速36%迎风起量
为电芯提供更“美的”守护,储能热管理液冷机组批量交付
优化消费政策精准服务新市民
中信建投:看好可再生能源制氢未来对新能源项目的利润贡献
杭萧钢构签订宏润科创中心项目钢结构工程
国际护士节的意义 国际护士节的意义是什么
怎么分辨空调四通阀线
北方小年是哪一天(北方小年是哪一天农历)
广州地铁五号线东延段车站揭开面纱 “无柱”设计更具空间感
耿爽大使在安理会也门问题公开会上的发言
潮阳区铜盂镇洋美村两个非法“小土染”工场被查处
我国实现从二氧化碳到糖的精准全合成
通用汽车投资“人工智能”电池初创公司
会员制商超价格战背后:行业存量竞争时代已来
eol测试(eol)
8月16日基金净值:博时主题行业混合(LOF)最新净值1.073,跌0.92%
基米希加盟利物浦!克洛普8000万欧报价拜仁核心,图赫尔会放弃吗
南阳市优化营商环境典型案例 | 方城县:出让“标准地” 项目大受益
龙高股份:2023年半年度净利润约5570万元 同比增加11.43%
一百八十二米! 黄河河南段塔高之最安罗高速黄河特大桥主塔封顶
我哭死,线雕多久可以恢复自然?线雕3个月脸越来越大怎么办?
2023年7月奔腾B70S销量多少? 在哪个城市卖得最好?
《erophone》存档在什么位置
日本出口两年多来首次下降
8月16日基金净值:景顺长城内需贰号混合最新净值1.306,涨0.08%
解放军和武警部队:全力打赢抗洪抢险救灾这场硬仗
华为云备份有微信聊天记录吗_华为云备份有什么用
前7个月邮政行业寄递业务量同比增长12.8% 专家预计将继续保持增长态势
CINNO Research:上半年中国光电显示产业投资金额同比下滑23%
哔哩哔哩Q2总营收达53亿元 毛利润同比大涨66%
2023南国书香节东莞沙田分会场活动攻略
英睿达 Pro 系列马甲内存降价:DDR5-5600 16G*2,599 元
冻干粉一天擦几次
剥怎么读
urc是哪个城市 urc是哪个城市的代码
罐头里面有没有防腐剂(罐头里面有没有防腐剂?)
警方通报:2死5伤
孩子想买贵衣服 妈妈不同意“躺地打滚” 走娃的路让他无路可走
美容仪真的值得买吗?Tripollar和宙斯哪个更热门?
本周五上午11时 崂山区助力啤酒节最后一轮消费券上线
ATA-4000系列高压功率放大器——应用场景介绍
高铁可以带几条烟2023最新规定
男子火车上霸座叫嚣让乘警坐牢?警方:行政拘留
欧元区第二季度国内生产总值环比增长0.3%
喵喵机打出来都是空白 喵喵机一直打出空白
力普拉斯电池是哪国的 力普拉斯电池是哪国的产品
墓园贿赂中间人介绍死者家属买墓地,回扣高达墓地价款的15%,市监局:没收违法所得,罚款30万元
5399元起 科沃斯地宝X2发布:8000Pa吸力超大吸力
TFBOYS粉丝怎么跟考研老哥掐起来了?
南极惊现20只触手的“海怪”!为啥深海动物都胡乱长?
AMD Zen5跑分逆天!Zen架构诞生以来最大飞跃
SpaceX成功发射第99批星链卫星:总数已达4962颗
创益通: 关于调整2021年限制性股票激励计划相关事项的公告
针对《王者荣耀》?众MOBA手游集体推出活动抢玩家
结核性淋巴结炎和淋巴结核一样吗 结核性淋巴结炎
遗失物还拥有所有权吗
原尚股份上半年净利润为负609万元,同比减少125%
全国多地不良贷款加速出清 各项指标居于合理区间
公共场所不能成“按摩场所”