听峰问雨 听峰问雨
首页
导航站
  • 编程语言

    • Python
  • 数据结构与算法
  • 设计模式
  • UVA
  • LeetCode
  • 《Go语言实战》
  • 《Go Web编程》
  • 《算法精粹 经典计算机科学问题的Python实现》
  • 学习
  • 博客搭建
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
GitHub (opens new window)

zfprotectors

默默学习er
首页
导航站
  • 编程语言

    • Python
  • 数据结构与算法
  • 设计模式
  • UVA
  • LeetCode
  • 《Go语言实战》
  • 《Go Web编程》
  • 《算法精粹 经典计算机科学问题的Python实现》
  • 学习
  • 博客搭建
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
GitHub (opens new window)
  • 《Go语言实战》

    • Go语言的介绍
    • 快速开始一个Go程序-RSS匹配器
    • 打包和工具链
    • 数组,切片和映射
    • Go语言的类型系统
      • 用户定义的类型
      • 方法
      • 类型的本质
        • 内置类型
        • 引用类型
      • 接口
      • 嵌入类型
      • 公开或未公开的标识符
    • 并发
  • 《Go Web编程》

  • 《算法精粹 经典计算机科学问题的Python实现》

  • 读书笔记
  • 《Go语言实战》
zfprotectors
2022-05-26
目录

Go语言的类型系统

Go 语言是一种静态类型的编程语言。这意味着,编译器需要在编译时知晓程序里每个值的类型。

值的类型给编译器提供两部分信息:

  • 第一部分,需要分配多少内存给这个值(即值的规模);
  • 第二部分,这段内存表示什么。

# 用户定义的类型

Go 语言里声明用户定义的类型有两种方法。

  • 最常用的方法是使用关键字 struct,它可以让用户创建一个结构类型。
type user struct {
	name  string
	email string
}
1
2
3
4

结构类型通过组合一系列固定且唯一的字段来声明。

  • 基于一个已有的类型,将其作为新类型的类型说明。
type Duration int64
1

新类型和原基础类型是有区别的,无法相互赋值。

# 方法

方法能给用户定义的类型添加新的行为。

在关键字func和方法名之间增加一个参数,该参数称为接收者,将函数与接收者的类型绑在一起。如果一个函数有接收者,这个函数就被称为方法。

func (u user) notify() {
    fmt.Printf("Sending User Email To %s<%s>\n", u.name, u.email)
}
// user类型的值可以用来调用
// 使用值接收者声明的方法
bill := user{"Bill", "bill@email.com"}
bill.notify()

func (u *user) changeEmail(email string) {
	u.email = email
}
// 指向 user 类型值的指针也可以用来调用
// 使用值接收者声明的方法
lisa := &user{"Lisa", "lisa@email.com"}
lisa.notify()

func (u *user) changeEmail(email string) { 
    u.email = email
}
// user 类型的值可以用来调用
// 使用指针接收者声明的方法
bill.changeEmail("bill@newdomain.com")
bill.notify()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

Go 语言里有两种类型的接收者:值接收者和指针接收者。

值接收者使用值的副本来调用方法,指针接收者使用实际值来调用方法。

# 类型的本质

如果是要创建一个新值,该类型的方法就使用值接收者。

如果是要修改当前值,就使用指针接收者。

# 内置类型

  • 数值类型
  • 字符串类型
  • 布尔类型

本质上是一种原始的数据值,所以在传递过程中,要进行值传递。

# 引用类型

# 接口

多态是指代码可以

# 嵌入类型

# 公开或未公开的标识符

编辑 (opens new window)
#Go
上次更新: 2022/06/10, 08:41:22
数组,切片和映射
并发

← 数组,切片和映射 并发→

最近更新
01
LeetCode88 - 合并两个有序数组
06-22
02
LeetCode1 - 两数之和
06-22
03
LeetCode1603 - 设计停车系统
06-21
更多文章>
Theme by Vdoing | Copyright © 2021-2022 zfprotectors | 闽ICP备2021014222号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式