zoukankan      html  css  js  c++  java
  • 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
    }
    

     

  • 相关阅读:
    【应试】数据通信与网络
    【应试】操作系统OS
    【笔记】 卷积
    【HDU 5920】 Ugly Problem
    【笔记】位运算
    【洛谷P1378】油滴扩展
    【洛谷 P1120】 小木棍[数据加强版]
    [codeforces]Round #538 (Div. 2) F. Please, another Queries on Array?
    [BZOJ]2563: 阿狸和桃子的游戏
    [BZOJ]4668: 冷战
  • 原文地址:https://www.cnblogs.com/derek1184405959/p/11306081.html
Copyright © 2011-2022 走看看