Golang学习笔记02

封装

将结构体,字段的属性都小写,类似于private

给结构体提供一个工厂模式的函数,首字母大写

提供一个首字母大写的set方法,对属性赋值

提供一个首字母大写的get方法,对属性访问

package mainimport "fmt"type people struct {Name stringage  int
}// 定义工厂模式函数
func NewPeople(name string) *people {return &people{Name: name,}
}func (p *people) SetAge(age int) {if age > 0 {p.age = age} else {fmt.Println("传入年龄不正确")}
}func (p *people) GetAge() int {return p.age
}func main() {p := NewPeople("张三")p.SetAge(18)fmt.Println(p.Name)fmt.Println(p.age)
}

继承

package mainimport "fmt"type animal struct {Age    intWeight float32
}func (an *animal) Shout() {fmt.Println("喊叫")
}func (an *animal) Show() {fmt.Printf("动物的年龄:%v,动物的体重:%v", an.Age, an.Weight)fmt.Println()
}// 定义结构体进行复用
type Cat struct {animal
}func (c *Cat) scratch() {fmt.Println("喵喵挠人")
}func main() {cat := &Cat{}cat.Age = 10cat.Weight = 100cat.Show()cat.Shout()cat.scratch()
}

go中虽然保留了多继承,但是不建议使用

package mainimport "fmt"type A struct {a intb string
}type B struct {c intd stringa int
}type C struct {AB
}func main() {var c = C{A{10, "100"}, B{20, "200", 30}}fmt.Println(c.A.a)fmt.Println(c.B.a)fmt.Println(c.b)fmt.Println(c.b)fmt.Println(c.d)
}

接口

定义规范,让别人来实现,golang中不需要显示实现接口,比java语法松散

package mainimport "fmt"type say interface {sayHello()
}type China struct {
}func (person China) sayHello() {fmt.Println("你好")
}type English struct {
}func (person English) sayHello() {fmt.Println("hello")
}// 定义函数,专门用来各国人打招呼,接受具备say接口能力的变量
func greet(s say) {s.sayHello()
}
func main() {c := China{}e := English{}greet(c)greet(e)
}

不能用接口创建实例,但可以指向实现该接口的自定义数据类型

自定义数据类型也能够实现接口,不仅仅是结构体

接口可以继承接口,弹药实现所有方法

interface是一个指针(引用类型)

空接口没有任何方法,所以可以理解为所有的类型都实现了接口,也可以理解为我们可以把
任何一个变量赋值给空接口

多态

在Golang中多态通过接口实现

func main() {
c := China{}
e := English{}
greet(c)
greet(e)
} //此时是多态的一种体现

断言

判断是否是该类型的变量

func greet(s say) {
s.sayHello()
//断言写法
var c = s.(China) //判断是否可以转化为China类型
c.chinaFunc()
}
func main() {
c := China{}
//e := English{}
greet(c)
//greet(e)
}

第二种写法

func greet(s say) {
s.sayHello()
//断言写法
//var c = s.(China) //判断是否可以转化为China类型
//c.chinaFunc()
ch, flag := s.(China)
if flag {
ch.chinaFunc()
} else {
fmt.Println("转化失败")
}
}e {sayHello()
}type China struct {
}func (person China) sayHello() {fmt.Println("你好")
}type English struct {
}func (person English) sayHello() {fmt.Println("hello")
}// 定义函数,专门用来各国人打招呼,接受具备say接口能力的变量
func greet(s say) {s.sayHello()
}
func main() {c := China{}e := English{}greet(c)greet(e)
}

不能用接口创建实例,但可以指向实现该接口的自定义数据类型

自定义数据类型也能够实现接口,不仅仅是结构体

接口可以继承接口,弹药实现所有方法

interface是一个指针(引用类型)

空接口没有任何方法,所以可以理解为所有的类型都实现了接口,也可以理解为我们可以把
任何一个变量赋值给空接口

多态

在Golang中多态通过接口实现

func main() {
c := China{}
e := English{}
greet(c)
greet(e)
} //此时是多态的一种体现

断言

判断是否是该类型的变量

func greet(s say) {
s.sayHello()
//断言写法
var c = s.(China) //判断是否可以转化为China类型
c.chinaFunc()
}
func main() {
c := China{}
//e := English{}
greet(c)
//greet(e)
}

第二种写法

func greet(s say) {
s.sayHello()
//断言写法
//var c = s.(China) //判断是否可以转化为China类型
//c.chinaFunc()
ch, flag := s.(China)
if flag {
ch.chinaFunc()
} else {
fmt.Println("转化失败")
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/31686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全外显子测序分析流程1 - Fastq质控与去接头、低质量和引物序列

全外显子测序分析流程1 - Fastq质控与去接头、低质量和引物序列 1. 运行实例 # -d 样本根目录 # -s 样本名称 python trim_fastq.py -d /result/WES/sample -s sample2. fastqc质控报告与去接头、低质量序列主程序 对raw fastq和clean fastq生成质控QC报告trim_galore去接头、…

Avalonia:一个.NET跨平台UI框架

概述 Avalonia是一个强大的框架,使开发人员能够使用. NET创建跨平台应用程序。它使用自己的渲染引擎来绘制UI控件,确保在各种平台上保持一致的外观和行为,包括Windows,macOS,Linux,Android,iOS…

Linux命令详解

Linux关机重启 命令解释shutdown -h now或poweroff立刻关机shutdown -h 11分钟后关机,不带参数默认1分钟shutdown -r now立刻重启halt立刻关机reboot立刻重启sync把内存的数据同步到磁盘,关机和重启前应该先做这一步,目前shutdown、reboot、…

深入理解RunLoop

RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。 一…

MySQL Online DDL 原理解读

在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站:…

Vector 例题

例题一&#xff1a; 下面这个代码输出的是( ) &#xfeff;#include <iostream> #include <vector> using namespace std; int main(void) { vector<int>array; array.push_back(100); array.push_back(300); array.push_back(300); array.push_back(300); a…

html做一个雷达图的软件

要实现一个在线输入数据并生成雷达图的功能&#xff0c;可以使用HTML表单和JavaScript来处理用户输入的数据。以下是一个示例代码&#xff0c;演示了如何实现这个功能&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"…

行列视(RCV)在报表设计中的创新应用

行列视(RCV)在报表设计中的创新应用 报表设计一直是数据处理和分析领域的重要一环&#xff0c;其质量和效率直接影响到企业决策的准确性和及时性。近年来&#xff0c;行列视(RCV)作为一种先进的数据处理和展示工具&#xff0c;在报表设计中的应用越来越广泛&#xff0c;带来了…

【LeetCode热题 100】三数之和

leetcode原地址&#xff1a;https://leetcode.cn/problems/3sum/description 描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和…

U盘文件夹损坏0字节:现象解析、恢复方法与预防措施

在日常工作和生活中&#xff0c;U盘因其便携性和大容量成为我们存储和传输数据的重要工具。然而&#xff0c;当U盘中的文件夹突然损坏并显示为0字节时&#xff0c;我们可能会感到困惑和焦虑。本文将对U盘文件夹损坏0字节的现象进行详细描述&#xff0c;分析其可能的原因&#x…

SHELL脚本学习(十一)正则表达式

一、锚点字符 1.1 锚点行首 脱字符(^)指出行首位置 $ cat < file1 test line1 test line2 test line3 line4 test#打印所有包括文本 test的行 $ sed -n /test/p file1 test line1 test line2 test line3 line4 test#打印所有以test为首的行 $ sed -n /^test/p file1 test…

PyTorch+CNN进行猫狗识别项目

任务介绍 数据结构为&#xff1a; big_data ├── train │ └── cat │ └── XXX.jpg&#xff08;每个文件夹含若干张图像&#xff09; │ └── dog │ └── XXX.jpg&#xff08;每个文件夹含若干张图像&#xff09; ├─…

【面试题分享】重现 string.h 库常用的函数

文章目录 【面试题分享】重现 string.h 库常用的函数一、字符串复制1. strcpy&#xff08;复制字符串直到遇到 null 终止符&#xff09;2. strncpy&#xff08;复制固定长度的字符串&#xff09; 二、字符串连接1. strcat&#xff08;将一个字符串连接到另一个字符串的末尾&…

Java中setLineWrap(true)和setWrapStyleWord(true)优化TextArea

在 Java Swing 开发中&#xff0c;JTextArea 是一个多行的文本区域组件&#xff0c;常用于显示和编辑大量文本。当处理长文本时&#xff0c;默认行为是不换行并且出现水平滚动条&#xff0c;这通常会降低用户体验。幸运的是&#xff0c;JTextArea 提供了两个非常有用的方法&…

Web Workers 与 DOM:异步处理与用户界面的和谐共存

在现代Web应用开发中&#xff0c;处理复杂的计算任务与维护流畅的用户界面体验是两大核心挑战。HTML5引入的Web Workers为解决这一难题提供了有效途径&#xff0c;它允许在后台线程执行脚本&#xff0c;从而避免了长时间运行的计算任务阻塞用户界面&#xff08;UI&#xff09;线…

协程之Flow chanel

Android面试题之Kotlin异步流、冷流Flow (qq.com)

读取Jar包下文件资源的问题及解决方案

问题 项目A代码调用到Resouces下的文件a.sh&#xff0c;打包成Jar包后&#xff0c;项目B调用对应方法时&#xff0c;出现报错&#xff0c;找不到a.sh文件路径&#xff0c;原来的代码可能是&#xff1a; URL resource getClass().getClassLoader().getResource("a.sh&qu…

为何你的App安装转化率不高?试试Xinstall的页面唤起功能吧!

在当今互联网快速发展的时代&#xff0c;App已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着市场竞争的加剧&#xff0c;App推广和运营面临着诸多挑战。其中&#xff0c;安装页面唤起不顺畅、用户体验不佳等问题&#xff0c;成为了许多开发者和运营者头疼的难题。为…

C++【继承】

继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设计的层次结构&#xff0c;体现…

网上预约就医取号系统

摘 要 近年来&#xff0c;随着信息技术的发展和普及&#xff0c;我国医疗信息产业快速发展&#xff0c;各大医院陆续推出自己的信息系统来实现医疗服务的现代化转型。不可否认&#xff0c;对一些大型三级医院来说&#xff0c;其信息服务质量还是广泛被大众所认可的。这就更需要…