• 4.Go-结构体、结构体指针和方法


     4.1.结构体

    结构体:将一个或多个变量组合到一起形成新的类型,这个类型就是结构体,结构体是值类型

    定义结构体和赋值

    //Learn_Go/main.go
    package main
    
    import "fmt"
    
    type People struct {
    	Name string
    	Age int
    }
    
    func main()  {
    	var peo People
    	fmt.Println(peo)           //{ 0}
    	fmt.Printf("%p",&peo)     //0x110040f0
    
    	//赋值
    	//第一种
    	peo = People{"derek",20}
    	fmt.Println(peo)      //{derek 20}
    	//第二种
    	peo2 := People{Age:12,Name:"jack"}
    	fmt.Println(peo2)     //{jack 12}
    
    	//第三种
    	peo.Name = "alice"
    	peo.Age = 25
    	fmt.Println(peo)     //{alice 25}
    }
    

     4.2.结构体指针

    由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用结构体指针完成

    可以结合new()函数创建结构体指针

    //Learn_Go/main.go
    package main
    
    import "fmt"
    
    type People struct {
    	Name string
    	Age int
    }
    
    func main()  {
    	peo := new(People)
    	fmt.Println(peo)              //&{ 0}
    	fmt.Println(peo == nil)       //false
    
    	peo.Name = "derek"
    	peo.Age = 22
    	fmt.Println(peo)              //&{derek 22}
    
    	peo2 := peo
    	fmt.Println(peo2)            //&{derek 22}
    
    	peo2.Name = "Jack"
    	fmt.Println(peo, peo2)       //&{Jack 22} &{Jack 22}
    }
    

     4.3.方法

    方法和函数语法比较像,区别是函数属于包,通过包调用函数,而方法属于结构体,通过结构体变量调用

    默认是函数,隶属于包,所以需要添加标识,告诉编译器这个方法属于哪个结构体 

     (1)创建方法

    //Learn_Go/main.go
    package main
    
    import "fmt"
    
    type People struct {
    	Name string
    	Weight int
    }
    
    func (p People) run() {
    	fmt.Println(p.Name,"正在跑步,当前体重为:",p.Weight)
    }
    
    func main()  {
    	peo := People{"derek",120}
    	peo.run()       //derek 正在跑步,当前体重为: 120
    }
    

    (2)修改值,用指针

    //Learn_Go/main.go
    package main
    
    import "fmt"
    
    type People struct {
    	Name string
    	Weight int
    }
    
    func (p *People) run() {
    	fmt.Println(p.Name,"正在跑步,当前体重为:",p.Weight)
    	//运行一次run方法,体重减去1
    	p.Weight -= 1
    }
    
    func main()  {
    	peo := People{"derek",120}
    	peo.run()       //derek 正在跑步,当前体重为: 120
    	fmt.Println("跑完步后的体重为:",peo.Weight)        //跑完步后的体重为: 119
    }
    
  • 相关阅读:
    Ubuntu16.04更新源后apt-get update报错的解决方法
    安装Ubuntu16.04 64bit系统时出错的解决方案
    采用Python-Qt5制作置顶透明桌面提醒词/座右铭/便签
    如何手动解析Keras等框架保存的HDF5格式的权重文件
    读取yml配置文件中的值
    添加20位随机数,不重复,可以用来作为发票申请流水等功能
    java 从json串中取出某个字段的值
    Spring事务的两种方式
    (附表设计)超级全面的权限系统设计方案
    nfs 测试
  • 原文地址:https://www.cnblogs.com/gaidy/p/11887094.html
Copyright © 2020-2023  润新知