GO语言基础教程15——结构体-方法和接收者

简介: Go语言的结构体没有构造函数,我们可以自己实现。

GO语言基础教程15——结构体-方法和接收者


GO语言基础教程15——结构体-方法和接收者


构造函数


Go语言的结构体没有构造函数,我们可以自己实现。


例如:

func newPerson(name, city string, age int8) *person {
  return &person{
    name: name,
    city: city,
    age:  age,
  }
}

调用构造函数

p := newPerson("likuis", "福建", 18)
fmt.Printf("%#v\n", p9) //&main.person{name:"likuis", city:"福建", age:18}


方法和接收者


Go语言中的方法(Method)是一种作用于特定类型变量的函数。这种特定类型变量叫做接收者(Receiver)。接收者的概念就类似于其他语言中的this或者 self


方法的定义格式如下:

func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {
    函数体
}

例如:

//Person 结构体
type Person struct {
  name string
  age  int
}
//NewPerson 构造函数
func NewPerson(name string, age int) *Person {
  return &Person{
    name: name,
    age:  age,
  }
}
//Dream Person做梦的方法
func (p Person) Dream() {
  fmt.Printf("%s想吃饭\n", p.name)
}
func main() {
  p1 := NewPerson("likuis", 18)
  p1.Dream()
}

方法与函数的区别是,函数不属于任何类型,方法属于特定的类型。


指针类型接收者

func (p *Person) SetName(newName string) {
  p.age = newName
}

调用该方法:

func main() {
  p1 := NewPerson("likuis", 18)
  fmt.Println(p1.name) // likuis 
  p1.SetName("刘德华")
  fmt.Println(p1.name) // 刘德华
}

值类型接收者

func (p Person) SetAge(newAge int) {
  p.age = newAge
}
func main() {
  p1 := NewPerson("likuis", 18)
  fmt.Println(p1.age) // 18
  p1.SetAge(30)
  fmt.Println(p1.age) // 18
}

一般来说需要修改接收者中的值或者接收者是拷贝代价比较大的大对象时使用指针接收者。

相关文章
|
1天前
|
存储 监控 算法
内网监控系统之 Go 语言布隆过滤器算法深度剖析
在数字化时代,内网监控系统对企业和组织的信息安全至关重要。布隆过滤器(Bloom Filter)作为一种高效的数据结构,能够快速判断元素是否存在于集合中,适用于内网监控中的恶意IP和违规域名筛选。本文介绍其原理、优势及Go语言实现,提升系统性能与响应速度,保障信息安全。
17 5
|
11天前
|
算法 安全 Go
Go语言中的加密和解密是如何实现的?
Go语言通过标准库中的`crypto`包提供丰富的加密和解密功能,包括对称加密(如AES)、非对称加密(如RSA、ECDSA)及散列函数(如SHA256)。`encoding/base64`包则用于Base64编码与解码。开发者可根据需求选择合适的算法和密钥,使用这些包进行加密操作。示例代码展示了如何使用`crypto/aes`包实现对称加密。加密和解密操作涉及敏感数据处理,需格外注意安全性。
33 14
|
11天前
|
Go 数据库
Go语言中的包(package)是如何组织的?
在Go语言中,包是代码组织和管理的基本单元,用于集合相关函数、类型和变量,便于复用和维护。包通过目录结构、文件命名、初始化函数(`init`)及导出规则来管理命名空间和依赖关系。合理的包组织能提高代码的可读性、可维护性和可复用性,减少耦合度。例如,`stringutils`包提供字符串处理函数,主程序导入使用这些函数,使代码结构清晰易懂。
50 11
|
11天前
|
存储 安全 Go
Go语言中的map数据结构是如何实现的?
Go 语言中的 `map` 是基于哈希表实现的键值对数据结构,支持快速查找、插入和删除操作。其原理涉及哈希函数、桶(Bucket)、动态扩容和哈希冲突处理等关键机制,平均时间复杂度为 O(1)。为了确保线程安全,Go 提供了 `sync.Map` 类型,通过分段锁实现并发访问的安全性。示例代码展示了如何使用自定义结构体和切片模拟 `map` 功能,以及如何使用 `sync.Map` 进行线程安全的操作。
|
4月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
JSON 编译器 Go
Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等)
Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等)
210 0
Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等)
|
Go C语言
Golang结构体和指针
Golang是一门很特殊的语言,虽然它出生比较晚,但是在很多地方却和现在的编程语言有所不同。现在的编程语言要么是函数式的、要么是面向对象的,而Go语言却有指针、结构体这些概念,并解决了C语言的一些坑。
1519 0
|
30天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
80 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
46 7
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。