方法
Golang中函数指的是一个封装的代码块,我们可以直接调用它,并返回结果;
而方法其实也是一种函数,只不过方法需要和某个对象绑定;
方法的定义
/* 定义结构体 */ type struct_name struct { /* variables */ } /* 定义方法 */ func (struct_name_variable struct_name) method_name() [return_type] { /* 方法实现 */ } /* 实例化结构体 */ test := struct_name /* 通过结构体调用方法 */ test.method_name
方法接收者
方法接收者 是一个特殊参数,给函数指定了这个参数之后,函数就成了方法了
例如下面这样,定义了一个 汽车结构,然后定义了一个 接收者方法, 然后就可以用面向对象的方式来调用这个方法了.
//定义一个结构体 type MyCar struct{ id int } //定义一个方法,beep为方法的名称,Car就是结构体,意思就是和Car这个结构体绑定,c就是方法内部调用结构体的名称 func(car MyCar) beep(){ fmt.Println(car.id) } func main() { //定义一个方法接收者 c := MyCar{id:100} //实例化这个结构体 c.beep() //通过这个结构体,调用这个方法 }
步骤:
创建结构体
创建 方法, 方法里绑定结构体
实例化结构体
通过结构体调用方法
import ( "fmt" "os/exec" ) //定义一个结构体 type Cmd struct { Path string Args []string } //获取用户输入的命令 func Command(name string, arg ...string) *Cmd { cmd := &Cmd{ Path: name, Args: append([]string{name}, arg...), } if filepath.Base(name) == name { if lp, err := LookPath(name); err != nil { cmd.lookPathErr = err } else { cmd.Path = lp } } return cmd } //执行用户输入的命令,跟Cmd这个结构体绑定,通过Cmd这个结构体可以调用这个方法 func (c *Cmd) CombinedOutput() ([]byte, error) { fmt.Printf("aaaaa: %s ",c) if c.Stdout != nil { return nil, errors.New("exec: Stdout already set") } if c.Stderr != nil { return nil, errors.New("exec: Stderr already set") } var b bytes.Buffer c.Stdout = &b c.Stderr = &b err := c.Run() return b.Bytes(), err } func main(){ var ( cmd *Cmd //初始化 这个结构体 output []byte err error ) cmd = Command("D:\cygwin\bin\bash.exe","-c","df -h") //实例化这个结构体,把Command函数获取到的值 赋值给cmd这个结构体 if output,err = cmd.CombinedOutput();err != nil{ //通过cmd这个结构体调用这个方法, 结构体这个方法是绑定的,所以结构体能调用这个方法 fmt.Println(err) } fmt.Println(string(output)) }
https://www.jianshu.com/p/6fa443a19267 方法看这个文章
接口
接口的定义
//定义一个接口,这个接口里,可以放一堆方法 type test interface { PrintPerson() } //定义一个结构体 type Person struct{ Name string Age int } //定义一个方法的具体实现 //这个方法和结构体绑定,Person是结构体,person是结构体传进来时供方法内部调用的的变量,下面可以通过person这个变量访问到结构体的 字段 func (person Person) PrintPerson(){ fmt.Printf("I am %s , age is %d ", person.Name,person.Age) } func main() { //把接口test 赋值给p这个变量 var p test //通过p去实例化 结构体,并给结构体字段赋值 p = Person{Name: "翟军铭", Age: 18} //通过结构体去调用方法 p.PrintPerson() }
https://www.runoob.com/go/go-interfaces.html 接口看这个文章