Golang基础-10

Go语言基础

介绍

基础

介绍

  • 本文介绍Go语言中方法定义、方法调用、String方法、结构体嵌套方法调用、方法初始化变量、接口定义、接口声明、接口变量赋值、接口的嵌套、类型断言、匿名接口与空接口等相关知识。

基础

方法
  • 方法是对类型定义的,且只能由该类型调用的函数。
  • 通过 type 自定义类型(结构体或任何自定义的类型),可对此类型定义方法。* 方法具有特定接收者(附加的类型),接收者可以是指针或值类型。
  • 函数不属于任何类型,方法指定特定的接收者类型。
// 方法的一般格式
func (t *T或T) MethodName(参数列表) (返回值列表) {
    // 方法体
}
方法定义
  • 方法必须是自定义类型,Go语言内置类型不支持用户对此类型拓展方法,使用 type 对内置类型自定义别名,自定义后的别名可以定义方法。
  • 方法声明要与接收者参数的基类型声明放在同一个包内。
type Cpu struct {
	Name string
	Id   int
}

// 接收者为值类型
func (c Cpu) GetName() string {
	return c.Name
}

func (c Cpu) GetId() int {
	return c.Id
}

// 接收者为指针类型
func (c *Cpu) PGetName() string {
	return c.Name
}

func (c *Cpu) PGetId() int {
	return c.Id
}
方法调用
  • 定义类型对象,调用类型方法时使用其对象调用。
  • 指针类型对象,调用接收者为值类型方法时,Go 编译器会自动将指针对象解引用为值调用方法。
  • 值类型对象,调用接收者为指针类型方法时,Go 编译器会自动将值对象取引用为指针调用方法。
  • 实际使用时若存在指针接收者,则所有方法使用指针接收者,否则都是用值接收者。
  • 接收者为指针类型的方法,运行时必须确保接收者不为 nil。
package main

import "fmt"

type Cpu struct {
	Name string
	Id   int
}

func (c Cpu) GetName() string {
	return c.Name
}

func (c Cpu) GetId() int {
	return c.Id
}

func (c *Cpu) PGetName() string {
	return c.Name
}

func (c *Cpu) PGetId() int {
	return c.Id
}

func main() {
	// 定义结构体对象
	cpu := Cpu{
		"Intel",
		10001,
	}
	fmt.Print("Name = ", (&cpu).PGetName()) // 常用写法 cpu.PPGetName()
	fmt.Println(", Id = ", cpu.GetId())

	// 定义结构体对象指针
	cpu2 := &Cpu{
		"AMD",
		10002,
	}

	// 两种方式均可调用
	fmt.Print("Name = ", (*cpu2).GetName())
	fmt.Println(", Id = ", cpu2.PGetId())
}

输出结果
Name = Intel, Id = 10001
Name = AMD, Id = 10002

String方法
  • 对于自定义结构体类型,通过实现 String 方法,就能调用 fmt.Println 函数输出结构体信息。
package main

import "fmt"

type Cpu struct {
	Name string
	Id   int
}

func main() {
	// 定义结构体对象
	cpu := Cpu{
		"Intel",
		10001,
	}
	fmt.Print(&cpu)
}

func (c *Cpu) String() string {
	ret := fmt.Sprintf("Name = %v, Age = %v", c.Name, c.Id)
	return ret
}

输出结果
Name = Intel, Age = 10001

结构体嵌套方法调用
  • 结构体嵌套有两种方式,匿名嵌套与命名嵌套。
  • 命名嵌套时,通过嵌套结构体的对象可以调用嵌套结构体的方法。
  • 匿名嵌套时,通过被嵌套结构体的对象可直接调用嵌套结构体的方法&

相关推荐

  1. Golang基础-10

    2024-04-05 00:10:02       36 阅读
  2. Golang基础-11

    2024-04-05 00:10:02       38 阅读
  3. Golang基础-12

    2024-04-05 00:10:02       36 阅读
  4. Golang基础教程

    2024-04-05 00:10:02       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 00:10:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 00:10:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 00:10:02       82 阅读
  4. Python语言-面向对象

    2024-04-05 00:10:02       91 阅读

热门阅读

  1. 大模型日报2024-04-03

    2024-04-05 00:10:02       44 阅读
  2. 软考之零碎片段记录(五)

    2024-04-05 00:10:02       33 阅读
  3. 速盾:cdn节点存储空间怎么管理

    2024-04-05 00:10:02       41 阅读
  4. 【LeetCode热题100】【技巧】多数元素

    2024-04-05 00:10:02       34 阅读
  5. git如何正确合并分支

    2024-04-05 00:10:02       39 阅读
  6. TCP长连接与短链接的区别

    2024-04-05 00:10:02       40 阅读