Claran's blog

路漫漫其修远兮

接口(interface)

接口是一组方法签名的集合,定义了类型应实现的行为。实现是隐式的:只要类型具有接口所需方法,就实现
该接口。

定义格式

1
2
3
4
type 接口名 interface {
Method1(arg T) R
Method2() error
}

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
type Stringer interface {
String() string
}

func Print(s Stringer) {
fmt.Println(s.String())
}

type Person struct { Name string }

func (p Person) String() string { return p.Name }

Print(Person{Name: "Tom"}) // Person 隐式实现 Stringer

接口与面向对象

Go的面向对象包含三大要素:接口、方法、结构体

定制接口 - 接口要求方法 - 存在方法满足接口要求 - struct存储信息 - 调用接口

方法需要结构体作为接受者,也就是结构体与方法是“封装”一步的关键

如图

多接口

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
type 接口名 interface {// 定义一个接口
方法名(参数) 返回值(方法类型) // 创建接口要求方法,满足所用方法即调用接口
...
}

type 结构体名 struct {// 根据设计意图进行变量封装
...
}

func (结构体变量名 结构体名/*方法接收器,定义方法操作的对象*/) 方法名(参数) 返回值{//定义满足要求方法的方法
... //方法实现过程
}

多态

通过用不同类型实现同一接口,可以实现接口的多态表现

解耦

通过接口定义依赖关系,降低模块之间的耦合

区别于Java类OOP式面向对象的Is-a关系,Go的Can-do关系不要求强制存在父类、子类和方法之间的访问修饰符定义等强耦合关系

泛化

使用空借口interface{}可表示任意类型

空接口

空接口 interface{} 可以表示任何类型

1
2
3
var x interface{}
x = 123
x = "hello

类型断言与类型选择

  • 类型断言获取具体类型或判断类型:
1
2
3
var v interface{} = "abc"
s := v.(string) // 断言,若失败会 panic
s, ok := v.(string) // 安全断言
  • 类型开关:
1
2
3
4
5
6
7
switch t := v.(type) {
case int:
// t 是 int
case string:
// t 是 string
default:
}

泛型(any)

与空接口类似,可以表示任何类型

不同的是,空接口在编译时容易发生类型安全错误,需要频繁类型断言

而泛型any会自动保证编译时类型安全,编译器会为每个使用的具体类型生成一份特化代码

拓展知识之后会逐渐接触

2025.10.22

我决定走Go方向

原因我也不知道,可能是因为Go是一门对我而言比较有新鲜感的语言吧



如此决定了之后,我便开始去招新群、飞书、Github找各种资料和学习大纲,并且翻到了很多往年的学习文件,让我至少有了个暂时的方向

然后就是最近几天,基本过完Go的基础语法后,我便开始着手于搭建自己的博客网站,花了整整两天终于搞出了成品(现在的这个网站)

自己在互联网上寻觅资料或教程、在实操时与AI斗智斗勇、在一次次调试后终于产出成果

也许正是这个过程让我对编程语言或后端开发、甚至计算机本身如此着迷



在翻找Github时,我看了很多学长自己的Blog

每个人的Blog都记录了自己的学习生涯,也都承载了他们学习历程的辛苦

看着学长们令人眼花缭乱的学习笔记,我再次认识到了自己的渺小

曾经我认为拥有一点点OI基础,便是同龄人追赶不上的存在

但是事实并非如此,OI只教会我一门语言的语法和它在算法与数据结构上的应用

OI并没有让我知道,原来后端开发不仅包含某门语言的基本语法和算法,还要求我掌握一堆我闻所未闻的专有名词

也没有让我知道,原来计算机的路是学无止境的,骄傲自满只会让我们与技术脱节

我看完了所有学长的Blogs

我决定与过去的我切割,与自满的我告别,从此刻开始积少成多

我想,这也是这个博客网站存在的意义之一吧



最近发现蓝桥杯又开始报名了,我便去了解了一下,发现我可以参加大学生B组比赛

再次明确了考试大纲后,我发现这组比赛的考试内容与我高中参加的CSP-S难度相差不大

我又萌生了参加蓝桥杯的想法

也就意味着我又要重拾,甚至是第二次重拾“算法与数据结构”的内容

幸运的是还有半年比赛才开始

那么就从现在开始每日一题



写了这么多可有可无的内容,让我感觉我的感悟未免有些假大空

我在未来学习的路上,一定会经历从兴趣驱动学习到意志驱动学习的转变

一定会经历从跟随他人学习到自己找资料学习的转变

那么,我现在一定要做好我所期望的每一件事

努力学习Go吧

0%