美文网首页
Go语言方法快速入门

Go语言方法快速入门

作者: Jaeyok | 来源:发表于2020-11-21 12:11 被阅读0次

    方法是和数据类型绑定的,自定义数据类型可以用方法

    package main
    import "fmt"
    
    type Person struct {
        Name string
        Age int
    }
    //方法是结构体的指针拷贝 会改变原结构体的数值
    func(p *Person) say() {
    
        p.Name ="jack"
        fmt.Println("方法中Name:", p.Name)
    }
    //方法是结构体的值拷贝 不会改变原结构体的数值
    func(p Person) sayhello() {
    
        p.Name ="love"
        fmt.Println("方法中Name:", p.Name)
    }
    
    
    
    func say(p *Person){
        p.Age=28
        fmt.Println("Age:", p.Age)
    }
    //结构体拷贝 变量拷贝
    func(p *Person) getSum(n1 int, n2 int) (int){
    
        return n1+n2
    }
    //String函数会在println中自动调用 绑定了Person这个类型
    func(p Person) String() string{
        str := fmt.Sprintf("Name=[%v], Age=[%v]",p.Name,p.Age)
        return str
    }
    
    func main() {
        //方法的使用
         var p Person
         p.Name="Tom"
         p.say()
        fmt.Println("主函数中Name:", p.Name)
    
        (&p).sayhello()//形式上是引用类型,但是方法中变量为值类型,因此还是值拷贝,无法改变变量的数值。
    
         fmt.Println("主函数中Name:", p.Name)
         var result = p.getSum(2,3)
         fmt.Println(result)
         //变量调用方法时,变量本身也会传到方法里面,如果变量是值类型,则值拷贝
         //如果是引用类型,则是地址拷贝
         fmt.Println(p)
         var sp Person
         fmt.Println(sp)
    
        say(&p)
         fmt.Println(p)
    
    }
    

    Go语言工厂模式,如果一个包内结构体名字首字母为小写,需要编写new函数。如果结构体中某个字段首字母为小写,需要在此包内新建一个在Get函数。

    package student
    type student struct {
        Name string
        age int
    }
    
    func NewStudent(name string, age int ) *student{
    
        return &student{
            Name: name,
            age:  age,
        }
    
    }
    
    func GetAge(stu *student) int{
        return stu.age
    }
    
    package main
    import (
        "exceise/student"
        "fmt"
    )
    
    func main() {
        stu := student.NewStudent("Loveyou", 18)
        fmt.Println("新建的student类型为:",*stu)
        fmt.Println("name=",stu.Name,"Age",student.GetAge(stu))
    }
    

    输出结果如下:

    新建的student类型为: {Loveyou 18}
    name= Loveyou Age 18

    相关文章

      网友评论

          本文标题:Go语言方法快速入门

          本文链接:https://www.haomeiwen.com/subject/prtjiktx.html