zoukankan      html  css  js  c++  java
  • Go-结构体,结构体指针和方法

    https://cloud.tencent.com/developer/article/1482382

    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
    }
  • 相关阅读:
    19c 新特性: Hint Usage Reports详解
    byte buddy学习笔记
    彻底告别“人工+Excel”低效模式,传统制造业实现“一站式”数据化管理
    有的人想在上班之余做兼职,并且不想投入太多钱
    2019你为什不选择创业?是因为什么原因?
    深入理解pandas读取excel,txt,csv文件等命令
    劳务派遣公司是怎么盈利的?
    为什么穷人大多不敢创业?
    30多岁了仍一事无成,除了去工厂上班还有哪些出路?
    MySQL Change Data Directory
  • 原文地址:https://www.cnblogs.com/bbllw/p/11932113.html
Copyright © 2011-2022 走看看