Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,而不仅仅是struct。
func (var *Struct_Name) FuncName( var0, var1... )  return type {}
package main
import (
	"fmt"
)
type test struct {
	name string
	age  int
}
func (v *test) getList() {
	fmt.Println("getList")
}
func main() {
	var s = new(test)
	s.getList()
}
package main
import (
	"fmt"
)
type test struct {
	name string
	age  int
}
func (this *test) init(name string, age int) {
	this.name = name
	this.age = age
}
func (this *test) getName() string {
	return this.name
}
func (this *test) getAge() int {
	return this.age
}
func main() {
	var s = new(test)
	s.init("zhangsan", 20)
	fmt.Println(s.getName())
	fmt.Println(s.getAge())
}
自行调用初始化方法来实现构造函数的作用

package main
import "fmt"
type integer int
func (this integer) test() {
	fmt.Println("print integer")
}
type test struct {
	name string
	age  int
}
func main() {
	var i = new(integer)
	i.test()
}

package main
type integer int
func main() {
	var i integer
	i = 100
	var n = 10
	n = i
}

package main
import (
	"fmt"
)
type integer int
func (this integer) get() {
	fmt.Println(this)
}
func (this integer) set(num integer) {
	this = num
}
func main() {
	var i integer
	i = 100
	i.set(1999)
	fmt.Print(i)
}

package main
import (
	"fmt"
)
type integer int
func (this integer) get() {
	fmt.Println(this)
}
func (this *integer) set(num integer) {
	*this = num
}
func main() {
	var i integer
	i = 100
	(&i).set(1999) //= i.set(1999)
	fmt.Print(i)
}

方法的访问控制也是通过控制的
如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问 匿名结构体的方法,从而实现了继承。
结构体方法的继承
package main
import (
	"fmt"
)
type test struct {
	Name int
	Age  int
}
func (this test) getName() int {
	return this.Name
}
type test1 struct {
	test
}
func main() {
	var t test1
	t.Name = 123
	var name = t.getName()
	fmt.Println(name)
}
如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问 匿名结构体的方法,从而实现了继承。
如果一个struct嵌套了另一个有名结构体,那么这个模式就叫组合。
package main
import (
	"fmt"
)
type test struct {
	Name int
	Age  int
}
func (this test) getName() int {
	return this.Name
}
type test1 struct {
	t test
}
func main() {
	var t test1
	t.t.Name = 123
	var name = t.t.getName()
	fmt.Println(name)
}
原文:https://www.cnblogs.com/LC161616/p/9904730.html