Go语言特性

一、结构体指针自动解引用

【注意】Go中结构体指针 是可以进行.获取对应参数,这是一个Go实现的语法糖,在指针对象使用.时候,Go会自动帮忙解引用指针,以下两种针对结构体指针对象的内部值获取的写法完全等价:

Go 复制代码
// 写法1:手动解引用(繁琐,Go 中不常用)
(*p).options.Namespace

// 写法2:直接用 . 访问(Go 自动解引用)
p.options.Namespace

但是注意,Go只会针对结构体指针进行解析,即使用结构体方法,访问结构体参数是不需要解引用都可以,但是针对基本类指针,多级指针,切片/数组指针,Map指针等其他指针,都不会进行自动解引用。

二、隐式接口

【问题】什么是隐式接口?

其实说白了就是不需要像Java或者C++那样,只有写了implements才算实现对应接口,看一下下面例子就懂了:

Go 复制代码
type Reader interface { 
    Read(p []byte) (int, error) 
} 

type FileReader struct{} 

func (FileReader) Read(p []byte) (int, error) 
{ return 0, nil } // 没有任何地方写 "implements Reader"

FileReader实现了Read方法,就算继承了Reader接口了。本质目的就是为了去掉OOP复杂继承体系,让接口聚焦于抽象,解耦,测试,例如聚焦于测试:

Go 复制代码
type mockReader struct {}

func (mockReader) Read(p []byte) (int, error) { return 0, nil }

可以直接替换Read方法实现逻辑。

三、裸返回

裸返回 仅在使用具名返回值时生效。具名返回值在函数开始时就已创建并初始化为零值,裸 return 会返回这些变量当前的内容。裸返回不是错误处理手段,只是省略返回值的语法糖。(说白了就是具名变量在设定时候就初始化了,return必定会返回这个对象,如果过程中没有向其中修改值,那就返回初始化默认值)

【插叙/注意】Json数据绑定为结构体,如果对应结构体内字段没有在Json数据中解析到对应映射,那就会将其赋值为默认值。

各个类型的默认值:

  • Bool : false

  • 数值类型 (int, uint, uintptr, float, complex):0

  • String : ""(空字符)

  • 指针类型(*T): nil

  • 数组(nT):每个元素都是其对应类型的默认值

  • 切片(\[\]T):nil

  • 映射(mapKV): nil

  • 通道(chan T):nil

  • 接口(interface{}):nil

  • 函数(func): nil

相关推荐
SHARK_pssm6 分钟前
【C++——类和对象(下)】
开发语言·c++·经验分享·笔记
凯哥Java7 分钟前
写代码怎么避免逻辑漏洞?
java·开发语言·人工智能·自动化
Ai-_Man42 分钟前
您您这可以把Dola的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。用AI导出鸭,答案是可以的
开发语言·前端·人工智能·小程序
Java后端的Ai之路44 分钟前
Python进阶探索23 - Python中的Time与Datetime模块
开发语言·数据库·python·datetime·time
沫璃染墨1 小时前
《从零入门Linux系统篇(五十四):线程篇·七——互斥锁底层原理:从原子交换到线程竞争与锁实现》
linux·运维·服务器·开发语言·c++·驱动开发·系统架构
Java后端的Ai之路1 小时前
Python进阶探索24_应用案例_linux系统的监控
linux·开发语言·python·应用·探索
程序员清风2 小时前
PydanticAI 实战:用类型安全构建可靠的 Python Agent
开发语言·python·安全
落魄实习生2 小时前
Agent Scope Java 2.x 系列【10】Middleware
java·开发语言·ai
JWASX2 小时前
Java 转 go 学习 - 类型转换
学习·golang
IT_陈寒2 小时前
SpringBoot启动慢得像蜗牛?原来是这个配置在捣鬼
前端·人工智能·后端