GO语言核心30讲 进阶技术 (第二部分)

 原站地址:Go语言核心36讲_Golang_Go语言-极客时间

一、接口类型的合理运用

1. 接口类型只包含方法,不包含字段。 方法集合就是它的全部特征。

    任何数据类型,只要实现了接口的方法集合全部,那么它就是这个接口的实现类型

2. 怎么判定该数据类型的方法,是实现了接口的方法? 

    签名一致(参数和返回), 函数名一致。

3. 数据类型的指针类型实现了一个接口所有的办法,但不代表它的值类型实现了这个接口。

    两者的方法集合是不等价的,指针类型的方法集合 包含了值类型的所有方法集合,但反过来就不是了。

4. 什么是 静态类型和动态类型,动态值 ?

    比如 *Dog类型是 Pet 接口的实现类型,那么:

dog := Dog{"little pig"}
var pet Pet = &dog

     Pet 是静态类型, *Dog 是就是动态类型; 赋给pet的值叫做动态值 (或者实际值)

5. 接口变量(实现接口的变量) 的赋值操作之后,也是以副本的方式进行赋值。

6. 接口变量被赋予动态值的时候,存储的是包含了这个动态值的副本的一个结构更加复杂的值。

    它包含两个指针,一个是指向类型信息的指针,另一个是指向动态值的指针。

7. 用 值为nil的接口变量 给 其他接口变量 赋值时,结果仍然是带类型的nil。   做 == nil 判断时,结果是false 。比如:

var dog1 *Dog
dog2 := dog1
var pet Pet = dog2

 这里 pet 的值就是带类型的nil  (Go 会用一个叫iface的实例包装它)

8. 接口也可以组合使用。  如果多个接口之间存在方法重名冲突的话,会编译不过。

    而且即使函数签名不一样,只是重名,也一样会编译不过。

二、关于指针的有限操作

1. 不可寻址的三种情况:不可变的值,临时结果,不安全的(操作会破坏程序的一致性,引发不可预知的错误)

2. 不可寻址的状态下,无法获取变量的指针,也就无法执行一些指针相关的操作。

    因此,New("little pig").SetName("monster")  这样是会编译错误的。

    同样情况,自增自减语句也要求表达式的结果值必须是可寻址的。因为 临时变量也不能自增。

3. 对于字典变量索引表达式结果值虽然不可寻址,但有三种例外的情况,不可寻址也能正确运行:

(1) 可以做自增操作

(2) 可以做赋值操作

(3) 可用用于range子句的for语句中,在range关键字左边的表达式

4. 指针的转换

dog := Dog{"little pig"}
dogP := &dog
dogPtr := uintptr(unsafe.Pointer(dogP))

  一个指针值(dogP) 可以被转换为一个unsafe.Pointer类型的值,再转成 uintptr 类型的值。

  只要再配合 unsafe.Offsetof(dogP.name) 方法,可以跳过各种限制直接查看和修改数据的权力。

  这是个非常规操作,可以用于调试。

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

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

相关文章

设计模式之代理模式ProxyPattern(六)

一、代理模式介绍 1、什么是代理模式? 代理模式是一种结构型设计模式,它允许为其他对象提供一个替代品或占位符,以控制对这个对象的访问。 2、代理模式的角色构成 抽象主题(Subject):定义了真实主题和代…

【java9】java9新特性之模块化

Java9模块化是Java9版本中引入的一个重要特性,通过Java Platform Module System (JPMS)实现。这个特性允许开发者将大型应用程序拆分成相互独立的模块,每个模块包含一组相关的功能和资源。 关键概念与语法 下面是Java9模块化的一些关键概念和语法&…

记一次使用Notepad++正则表达式批量替换SQL语句

目录 一、需求二、解决方案三、正则解析 一、需求 存在如下SQL建表脚本: CREATE TABLE "BUSINESS_GOODS" ( "ID" VARCHAR(32) NOT NULL, "GOODS_CODE" VARCHAR(50), "GOODS_NAME" VARCHAR(100), ... NOT CLUSTER PRIMARY…

selenium之document.querySelector()方法

document.querySelector()方法 1. 常用的三种获取元素的js方式 document.getElementById("");document.getElementsByClassName();document.getElementsByTagName(); var docdocument;var boxdoc.getElementById("box");var libox.getElementsByTagName(…

Ceph PG

概述 为了实现不同存储池之间的策略隔离,以及针对不同用途的存储池指定不同的容灾策略,ceph crush使用中间结构即Placement Group(后续均以PG简称)将应用数据对象进行映射后,写入OSD本地存储设备。PG也是我们日常运维…

常见的 HTML 标准

常见的 HTML 标准 常见的 HTML 标准发布历史 HTML(Hypertext Markup Language)有多个版本和标准。以下是一些常见的 HTML 标准: HTML 2.0:于1995年发布,是 HTML 的第一个正式标准。HTML 3.2:于1997年发布…

刷代码随想录有感(50):路径总和

题干: 代码; class Solution { public:bool traversal(TreeNode* node, int count){if(node NULL)return false;if(!node -> left && !node -> right && count 0)return true;if(!node -> left && !node -> right &&…

python挑战10秒小程序

目录 一.前言 二.代码 三.分析 一.前言 >1.小程序开始时,会出现一个倒计时器,从10秒开始。 >2.玩家需要集中注意力并估计10秒钟过去的时间。 >3.当玩家认为10秒钟已经过去时,需要点击屏幕上的按钮。 >4.小程序会显示玩家的点击时间,以及与实际10秒钟的时间…

wetrtc简介

WebRTC(Web Real-Time Communication)是一种实时通信技术,它允许网络应用或站点在无需中间媒介的情况下,直接在浏览器之间建立点对点(Peer-to-Peer)的连接,实现音频、视频流或其他任意数据的实时…

泰勒创造力达到顶峰?(上)

hello,大家好!今天看一篇经济学人的一篇评论,说的是泰勒斯威夫特当前的创造力。经济学人总是语不惊人死不休,看看它对这位音乐天才做了怎样的评价。 事先声明哈,本文就是一种英语学习类讲述,没带任何个人色彩&#xff…

网络舆情分析:利用自然语言处理(NLP)洞察公众情绪

🌐 网络舆情分析:利用自然语言处理(NLP)洞察公众情绪 📊 概述 在数字化时代,公众情绪和舆论对企业品牌、政治决策乃至社会趋势都有着深远的影响。通过自然语言处理(NLP)技术&#…

北京金融大数据有限公司X百望云签署战略合作协议 共同发布“金数数据要素流通云平台”

随着数据资产与数据要素相关政策密集出台,资本与实业企业均跃跃欲试。但因为没有龙头企业的方案引领和成熟的落地实践,市场呈谨慎观望态势,热度无处安放。 北京金融大数据有限公司(以下简称“金融大数据公司”)作为市…

动手学深度学习——softmax分类

1. 分类问题 回归与分类的区别: 回归可以用于预测多少的问题, 比如"预测房屋被售出价格",它是个单值输出。softmax可以用来预测分类问题,例如"某个图片中是猫、鸡还是狗?",这是一个多…

深入理解正则表达式:从入门到精通

title: 深入理解正则表达式:从入门到精通 date: 2024/4/30 18:37:21 updated: 2024/4/30 18:37:21 tags: 正则Python文本分析日志挖掘数据清洗模式匹配工具推荐 第一章:正则表达式入门 介绍正则表达式的基本概念和语法 正则表达式是一种用于描述字符串…

Bert基础(二十一)--Bert实战:文本摘要

一、介绍 1.1 文本摘要简介 文本摘要(Text Summarization),作为自然语言处理(NLP)领域的一个分支,其核心目标是从长篇文档中提取关键信息,并生成简短的摘要,以提供对原始内容的高度…

Go语言map

map 概念 在Go语言中,map 是一种内建的数据结构,它提供了一种关联式的存储机制,允许你以键值对的形式存储数据。每个键都是唯一的,并且与一个值相关联。你可以通过键来查找、添加、更新和删除值,这类似于其他编程语言…

MAKEFILE 从易到难

相信一个简单的makefile, 只要用过C语言的都能写出来。 但是如果工程中包含了几十个文件夹, 上万个文件, 那用一般的方式就搞不定了。 在用dpdk 的时候, 会经常修改makefile要适配我们的工程。 最开始也是用dpdk中自带的makefil…

wpf 树形结构

Simplifying the WPF TreeView by Using the ViewModel Pattern - CodeProject 【原创】WPF TreeView带连接线样式的优化(WinFrom风格) - iDream2016 - 博客园 (cnblogs.com)

Android 音视频播放器 Demo(二)—— 音频解码与音视频同步

音视频编解码系列目录: Android 音视频基础知识 Android 音视频播放器 Demo(一)—— 视频解码与渲染 Android 音视频播放器 Demo(二)—— 音频解码与音视频同步 RTMP 直播推流 Demo(一)—— 项目…

selenium截屏代码

六、截屏应用场景:失败截图,让错误看的更直观方法: driver.get_screenshot_as_file(imgepath)参数:imagepath:为图片要保存的目录地址及文件名称如: 当前目录 ./test.png上一级目录 ../test.png扩展&#x…