当前位置: 首页 > news >正文

三天Golang快速入门—面向对象

面向对象

  • Golang接口的定义
    • go中类
  • 空接口
    • 空接口作为函数的参数
    • 切片实现空接口
    • map的值实现空接口
  • 类型断言
  • 值接收者和指针接收者
    • 值接收者
    • 指针接收者
  • 接口嵌套

Golang接口的定义

  • 接口interface是一种抽象的类型。
  • 接口定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节
  • 一个对象只要全部实现了接口中的方法,那么就实现了这个接口。
    看一个接口示例
package mainimport "fmt"// 1.接口时一个规范
type Usber interface {start()stop()
}// 2.如果接口里面有方法的话,必须要通过结构体或者通过自定义类型实现这个接口
type Phone struct {Name string
}// 3.手机要实现usb借口的话必须实现usb接口中所有方法
func (p Phone) start() {fmt.Println(p.Name, "启动")
}
func (p Phone) stop() {fmt.Println(p.Name, "关机")
}func main() {p := Phone{Name: "小米手机"}var p1 Usber // 接口就是一个数据类型p1 = p       // 表示手机实现Usb接口p1.start()p1.stop()
}
/*
小米手机 启动
小米手机 关机
*/

go中类

  • 没有类的概念,也不支持类的继承等面向对象的概念。
  • 通过结构体内嵌配合接口比面向对象具有更高的扩展性和灵活性。

空接口

  • golang中空接口也可以直接当做类型使用,泛型概念
  • 接口可以不定义任何方法,没有定义任何方法的接口就是空接口
  • 空接口表示没有约束
  • 空接口可以表示任意数据类型

空接口作为函数的参数

package mainimport "fmt"// 空接口作为函数的参数
func show(a interface{}) {fmt.Printf("值:%v 类型:%T\n", a, a)
}func main() {show(20)   // 值:20 类型:intshow("你好") // 值:你好 类型:stringSlice := []int{1, 2, 3, 4}show(Slice) // 值:你好 类型:string 
}

切片实现空接口

package mainimport "fmt"func main() {var Slice = []interface{}{"张三", 20, true, 20.2}fmt.Println(Slice) // [张三 20 true 20.2]}

map的值实现空接口

package mainimport "fmt"func main() {// 空接口作为 map 值var studentInfo = make(map[string]interface{})studentInfo["name"] = "张三"studentInfo["age"] = 10studentInfo["married"] = falsefmt.Println(studentInfo) // map[age:10 married:false name:张三]
}

类型断言

  • 一个接口的值是由一个具体类型和具体类型的值两部分组成的。
  • 这两部分分别称为接口的动态类型和动态值。
  • 如果想要判断空接口中值的类型,那么可以使用类型断言。
  • 语法格式:x.(T)
  • x:表示类型为interfact{}的变量
  • T:表示断言x可能是的类型
package mainimport "fmt"func main() {var x interface{}x = "hello golang"v, ok := x.(string)if ok {fmt.Println(v)} else {fmt.Println("非字符串类型")}
}

值接收者和指针接收者

值接收者

package mainimport "fmt"type Mover interface {move()
}type Dog struct {
}// 值接收者实现接口
func (d Dog) move() {fmt.Println("狗会动")
}func main() {var x Movervar wangcai = Dog{} // 旺财是值类型x = wangcai         // x可以接收Dog类型var fugui = &Dog{}  // 富贵是指针类型x = fugui           // x可以接收*Dog类型x.move()
}/*
用值接收者实现接口后,不管是Dog结构体还是结构体指针*Dog类型的变量都可以赋值给该接口变量。
因为Go中有对指针类型变量求值的语法糖,Dog指针fugui内部会自动求值*fugui。
*/

指针接收者

package mainimport "fmt"type Mover interface {move()
}type Dog struct {
}// 指针接收者实现接口
func (d *Dog) move() {fmt.Println("狗会动")
}func main() {var x Movervar wangcai = Dog{} // 旺财是值类型x = wangcai         // x不可以接收Dog类型var fugui = &Dog{}  // 富贵是指针类型x = fugui           // x可以接收*Dog类型x.move()
}
/*
Move接口的接收者是指针类型,所以不能给x传入Dog类型的wangcai,因此x只能存储*Dog类型的值。
*/

接口嵌套

package mainimport "fmt"type Sayer interface {say()
}type Mover interface {move()
}// 接口嵌套
type animal interface {SayerMover
}type cat struct {name string
}func (c cat) say() {fmt.Println("喵喵喵")
}func (c cat) move() {fmt.Println("猫动了")
}func main() {var x animalx = cat{name: "大橘"}x.move()x.say()
}

相关文章:

三天Golang快速入门—面向对象

面向对象Golang接口的定义go中类空接口空接口作为函数的参数切片实现空接口map的值实现空接口类型断言值接收者和指针接收者值接收者指针接收者接口嵌套Golang接口的定义 接口interface是一种抽象的类型。接口定义了一个对象的行为规范,只定义规范不实现&#xff0…...

开发手册——一、编程规约_6.并发处理

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。 说明:资源驱动类、工具类、单例工厂…...

ACM---大一第三周周赛(Floyd算法+并查集算法学习周)

🚀write in front🚀 📝个人主页:认真写博客的夏目浅石.CSDN 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​ 📣系列专栏:ACM周训练题目合集.CSDN 💬总结&#xff1a…...

spring整合mybatis和Junit

该项目使用spring纯注解方式开发&#xff0c;用配置类取代spring的配置文件 一、导入依赖 整合Junit需要导入spring-test 整合mybatis需要导入spring-jdbc、mybatis-spring <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-cont…...

Spring Boot 3.0系列【7】核心特性篇之JSON

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言JSON什么是JSON常用JSON 库GsonFastJsonJacksonJackson 还是 FastjsonSpring Boot 中的 JSON1. 自动配置 Jackson2. @…...

【数据结构初阶】二叉树顺序结构:堆的实现

前言 前边077带着大家学习了树与二叉树的相关概念&#xff0c;这篇文章我们来实现一个二叉树的顺序结构。 二叉树的顺序结构 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉…...

C/C++:动态内存管理

目录 一. C/C内存分布 二. C/C动态内存管理 2.1 C语言动态内存管理 2.2 C动态内存管理 2.2.1 new/delete操作符 2.2.2 operator new与operator delete函数 2.3 new/delete的实现原理 2.4 定位new&#xff08;placement - new&#xff09; 2.5 new/delete和malloc/free的…...

黑猫带你学eMMC协议第28篇:eMMC的开漏和推挽模式(push-pull open drain)

本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,已加入原创侵权保护,禁止私自转载。 文章所在专栏:《黑猫带你学:eMMC协议详解》 1 什么是开漏和推挽 1.1 推挽电路是什么 关于推挽和开漏电路,更多介绍详见我的另一篇文章…...

simulink PID控制

系列文章目录 文章目录系列文章目录前言一、非线性系统线性化原理二、反馈控制开环控制反馈or闭环控制PID ControllerPID微调案例总结前言 将非线性系统近似线性化PIDblock与微调 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、非线性系统线性化 …...

如何在for循环内执行异步操作

var定义的i是全局的&#xff0c;每次遍历都会覆盖&#xff0c;最后i的值为10&#xff0c;所以输出10次10 for (var i 0; i < 10; i) {setTimeout(function () {console.log(i) // 输出10遍10}, 1000 i * 100)}setTimeOut 第三个函数 for (var i 0; i < 10; i) {setT…...

性能测试——LoadRunner: Controller的使用

Controller Controller是用来创建测试环境&#xff0c;执行在VUG中编写的测试脚本 可以直接点击Controller的快捷方式打开,也可以在VUG中打开 这里将虚拟用户数设置为3,比较适合自己的电脑性能 整个controller分为下面几个模块 这里先设置左下角的目标计划 设置初始化:双击…...

ChatGPT解答:纯前端文档预览,Vue实现,无需后端,支持Word、Excel、PPT、pdf、文本、图片,附接入demo和文档

ChatGPT解答&#xff1a;纯前端文档预览&#xff0c;Vue实现&#xff0c;无需后端&#xff0c;支持Word、Excel、PPT、pdf、文本、图片&#xff0c;附接入demo和文档 ChatGPTDemo Based on OpenAI API (gpt-3.5-turbo). 纯前端文档预览&#xff0c;Vue实现&#xff0c;无需后…...

刷题记录:牛客NC13950 Alliances 到树上联通点集的最短距离

传送门:牛客 题目描述: 题目较长,此处省略 输入: 7 1 2 1 3 2 4 2 5 3 6 3 7 2 2 6 7 1 4 3 5 1 2 1 1 1 5 2 1 2 输出: 2 1 1一道比较复杂的树题.需要一些复杂的讨论以及LCA知识 对于LCA,可以使用树链剖分进行解决 然后我们看一下题目,我们会发现有这样一个简单的结论,那就…...

行为型模式 - 状态模式State

学习而来&#xff0c;代码是自己敲的。也有些自己的理解在里边&#xff0c;有问题希望大家指出。 个人理解&#xff1a;感觉像桥接模式 代理模式。不知道这么想对不对&#xff0c;还希望笔记在放出后&#xff0c;有大佬彻底了解了给我解解惑。 策略模式的定义与特点 策略&…...

电视剧《狂飙》太过诡异,主演各个悄无声息,龙套演员却身价倍增

说起电视剧《狂飙》&#xff0c;相信很多人都有过观看&#xff0c;这部以反腐为题材的大剧&#xff0c;尺度之大近年来绝无仅有。不过观众在被剧情震撼的同时&#xff0c;也发现了一些诡异的事情&#xff0c;比如说主角和配角的反差&#xff0c;让人感觉很不适应。 在电视剧《狂…...

【微信小程序】-- 案例 - 本地生活(二十)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…...

LeetCode 每日一题 2023/2/27-2023/3/5

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录2/27 1144. 递减元素使数组呈锯齿状2/28 2363. 合并相似的物品3/1 2373. 矩阵中的局部最大值3/2 面试题 05.02. 二进制数转字符串3/3 1487. 保证文件名唯一3/4 982. 按位与为…...

SpringMVC中JSON数据的设置、RestFul风格

Java知识点总结&#xff1a;想看的可以从这里进入 目录3.4、JSON数据3.4.1、前端使用3.4.2、后端使用1、Jackson2、fastjson3.5、RestFul风格3.5.1、简介3.5.2、使用3.4、JSON数据 3.4.1、前端使用 前端在JavaScript中有封装的JSON对象&#xff0c;可以直接用来操作JSON数据。…...

Clion连接Docker,使用HElib库

文章目录需求Clion连接服务器内的DockerDockerCLionDocker内配置HElib库参考需求 HElib库是用C编写的同态加密开源库&#xff0c;一般在Linux下使用为了不混淆生产环境&#xff0c;使用Docker搭建HElib运行环境本地在Windows下开发&#xff0c;使用的IDE为Clion&#xff0c;本…...

go网络编程-websocket

1. WebSocket编程 文章目录1. WebSocket编程1.1.1. webSocket是什么1.1.2. 举个聊天室的小例子server.go文件代码hub.go文件代码data.go文件代码local.html文件代码1.1.1. webSocket是什么 WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...