## 定義
類的定義是依托結構體來的,比如
```
type Person struct {
name string
age uint
male bool
}
```
## 初始化
go不支持構造函數,析構函數,可以定義NewXXX這樣的全局函數來實現類的初始化
```
func NewPerson(name string, age uint, male bool) *Person {
return &Person{name, age, male}
}
```
## 成員方法
要為 Go 類添加成員方法,需要在`func`和方法名之間添加方法所屬的類型聲明(有的地方將其稱之為`接收者聲明`)
**值方法**
```
func (p Person) GetName() string {
return p.name
}
```
Go 語言面向對象編程不像 PHP、Java 那樣支持隱式的`this`指針,所有的東西都是顯式聲明的
若要修改類的屬性,則類型聲明需要設置成指針類型
**指針方法**
```
func (p *Person) SetName(name string) {
p.name = name
}
```
## 字符串格式打印類的實例
PHP、Java 支持默認調用類的`toString`方法以字符串格式打印類的實例,Go 語言也有類似的機制,只不過這個方法名是`String`
```
func (p *Person) String() string {
return fmt.Sprintf("{name: %s, age: %d, male: %t}",
p.name, p.age, p.male)
}
```
直接打印類實例,無需調用`String`方法
同一個方法集合中的方法不能出現重名,并且,如果它們所屬的是一個結構體類型,那么它們的名稱與該類型中任何字段的名稱也不能重復。
## 基本數據類型添加成員方法
在 Go 語言中,你可以給任意類型(包括基本類型,但不包括指針類型)添加成員方法,但是如果是基本類型的話,需要借助`type`關鍵字對類型進行再定義
```
type Integer int
func (a Integer) Equal(b Integer) bool {
return a == b
}
```
## 繼承和方法重構
通過組合來實現類的繼承和方法重構
```
type Dog struct {
Animal
}
```
- php
- 安全
- php7
- 特性
- 編譯安裝
- 源碼整體框架
- 基本變量
- thinkphp3.2.3
- thinkphp5.0
- thinkphp6.0
- laravel
- 配置
- 路由
- artisan控制臺
- eloquent
- tinker
- composer
- 加密解密
- 小知識點
- 數組
- string
- 代碼簡潔之道
- 編譯
- 語法糖
- lumen
- smarty
- 錯題集
- 算法及數據結構
- 線性表結構
- 插入排序
- 冒泡排序
- 數據庫
- mysql
- oracle
- PostgreSQL
- redis
- sqlserver
- 前端
- 備忘
- js
- nodejs
- vue
- css
- electron
- vue
- 語法糖
- colorui使用筆記
- 微信小程序
- 操作系統
- windows
- bat
- 快捷鍵
- linux
- sed
- 問題解決
- git
- docker
- docker-compose
- 正則表達式
- ps
- lua
- 協議相關
- 問題思索
- Golang
- 測試
- 讀取和寫入json配置文件
- 類
- 接口
- mod
- gin
- fyne
- 禪道二次開發
- 服務
- apache
- 漏洞配置
- http server優化
- nginx
- 安裝
- 面試題庫
- freeswitch