zl程序教程

您现在的位置是:首页 >  后端

当前栏目

golang方法的使用细节:参数默认是值拷贝,不仅仅是struct自定义数据类型也可以绑定方法、方法名称首字母大写为public权限、String()方法的使用

方法权限Golang string 参数 自定义 可以 默认
2023-09-14 09:01:53 时间

(1)结构体类型是值类型,在方法调用中,遵守值类型的传递机制,是值拷贝传递方式
在这里插入图片描述

(2)如程序员希望在方法中,改变结构体变量的值,可以通过结构体指针的方式来处理

在这里插入图片描述
在这里插入图片描述

我们写程序的时候,可以直接简化:
在这里插入图片描述

底层编译器做了优化,底层会自动帮我们加上& *

(3)Golang中的方法作用在指定的数据类型上的,和指定的数据类型绑定,因此自定义类型,都可以有方法,而不仅仅是struct,比如int , float32等都可以有方法

package main
import "fmt"
type integer int
func (i integer) print(){
        i = 30
        fmt.Println("i = ",i)
}
func (i *integer) change(){
        *i = 30
        fmt.Println("i = ",*i)
}
func main(){
        var i integer = 20
        i.print()
        i.change()
        fmt.Println(i)
}

(4)方法的访问范围控制的规则,和函数一样。方法名首字母小写,只能在本包访问,方法首字母大写,可以在本包和其它包访问。

(5)如果一个类型实现了String()这个方法,那么fmt.Println默认会调用这个变量的String()进行输出

这个String()方法相当于java中的toString()方式

以后定义结构体的话,常定义String()作为输出结构体信息的方法,在fmt.Println会自动调用

package main
import "fmt"
type Student struct{
        Name string
        Age int
}
func (s *Student) String() string{
        str := fmt.Sprintf("Name = %v , Age = %v",s.Name,s.Age)
        return str
}
func main(){
        stu := Student{
                Name : "丽丽",
                Age : 20,
        }
        //传入地址,如果绑定了String方法就会自动调用
        fmt.Println(&stu)
}