标签:规则 strong 说明 实参 指定字段 color 地方 多个 结构体类型
在某些情况下,我们需要声明方法,比如person结构体,除了有一些字段外,Person结构体还有一些行为,比如:可以说话、跑步等,这时候就要用方法才能实现。
Golang中的方法是作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以由方法,而不仅仅是struct。
type A struct {
Num int
}
func (a A) test(){
fmt。Println(a.Num)
}
package main import ( "fmt" ) type Person struct { Name string } //给Person类型绑定一个方法 func (p Person) test() { fmt.Println("test()", p.Name) } func main() { var p Person p.test() //调用方法 }
说明:方法的调用和传参机制和函数基本一样,不一样的地方是方法调用时,会将调用方法的变量,当做实参也传递给方法。
方法定义格式:
func (recevier type)methodName(参数列表) (返回值列表){
方法体
retutn 返回值
}
说明:
1)参数列表,表示方法输入
2)recevier type:表示这个方法和type这个类型进行绑定,或者说改方法作用于type类型
3)receiver type:type可以是结构体,也可以是其他的自定义类型
4)receiver:就是type类型的一个变量(实例),比如:Person结构体的一个变量
5)参数列表:表示方法输入
6)返回值类型:表示返回的值,可以多个
7)方法主体:表示为了实现某一功能代码块
8)return 语句不是必须的
1)结构体类型是值类型,在方法调用中,遵守值类型的传递机制,是值拷贝传递方式
2)如程序员希望在方法中,修改机构体变量的值,可以通过结构体指针的方式来处理
3)Golang中的方法作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是struct,比如int,float32等都可以有方法
4)方法的访问范围控制的规则,和函数一样,方法名首字母小写,智能在本包访问,方法首字母大写,可以在本包和其他包访问
5)如果一个变量实现了string()这个方法,那么fmt.Pringtln默认会调用这个变量的String()进行输出
1)调用方式不一样
函数的调用方式:函数名(参数列表)
方法的调用方式:变量.方法名(实参列表)
2)对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然
3)对于方法(如struct的方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以
Golang在创建结构体实例时,可以直接指定字段的值
方式1:
//定义一个结构体 Student type Student struct{ Name string Age int } func main(){ var stu1 Student = Student{"tom",10} stu2 :=Student{"tom~",20} var stu3 Student = Student{ Name: "mary", Age: 30, } stu4 := Student{ Name: "mary~", Age: 30, } fmt.Println("stu1 = ",stu1) fmt.Println("stu2 = ",stu2) fmt.Println("stu3 = ",stu3) fmt.Println("stu4 = ",stu4) }
方式2:
var stu5 *Student = &Student{"smith",40} var stu6 *Student = &Student{ Name:"scott", Age: 90, } fmt.Println("stu5 = ",stu5) fmt.Println("stu6 = ",stu6)
标签:规则 strong 说明 实参 指定字段 color 地方 多个 结构体类型
原文地址:https://www.cnblogs.com/ckfuture/p/14851931.html