Aben's Blog

vuePress-theme-reco Aben    2020 - 2025
Aben's Blog Aben's Blog

Choose mode

  • dark
  • auto
  • light
Home
Category
  • Docker
  • Node.js
  • golang
  • iOS
  • macOS
Tag
TimeLine
More
  • GitHub
  • Backend
author-avatar

Aben

21

Article

24

Tag

Home
Category
  • Docker
  • Node.js
  • golang
  • iOS
  • macOS
Tag
TimeLine
More
  • GitHub
  • Backend

在ingerface中使用泛型,实现链式方法

vuePress-theme-reco Aben    2020 - 2025

在ingerface中使用泛型,实现链式方法

Aben 2022-09-26 23:15:01 golanggenerics

package main

import "fmt"

type Common struct {
	Name string
}

type ProjectInterface[T any] interface {
	Init() T
	Func1() T
}

type ProjectStruct struct {
	Name string
}

func (p ProjectStruct) Init() ProjectStruct {
	// 返回深拷贝,而不是指针
	return ProjectStruct{Name: p.Name}
}

func (p ProjectStruct) Func1() ProjectStruct {
	// 返回深拷贝,而不是指针
	return ProjectStruct{Name: p.Name}
}

func Test() {
	project := ProjectStruct{Name: "I am Project"}.Init().Func1()
	fmt.Println(project)
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34