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
    }
  • 相关阅读:
    向量的旋转
    阅读开源库源码,发现这两个方法,惭愧啊!真没看明白
    小实例窥探dotnet垃圾回收
    记录asp.net在IE10下事件丢失排错经过
    CSS布局技巧之——各种居中
    前端程序员容易忽视的一些基础知识
    Web前端体系的脉络结构
    前端程序员容易忽视的一些基础知识
    CSS布局技巧之——各种居中
    面试分享:一年经验初探阿里巴巴前端社招
  • 原文地址:https://www.cnblogs.com/bbllw/p/11932113.html
Copyright © 2011-2022 走看看