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
    }
    
  • 相关阅读:
    [AT2064] [agc005_f] Many Easy Problems
    [AT2304] [agc010_c] Cleaning
    [AT2172] [agc007_e] Shik and Travel
    [AT2148] [arc063_c] Integers on a Tree
    [AT2363] [agc012_c] Tautonym Puzzle
    未能从程序集“netstandard, Version=2.0.0.0......”中加载类型“...”。
    Android Studio设置国内镜像代理
    新建一个浏览器APP
    Android Studio在Make Project时下载Grandle特别慢
    用JS添加和删除class类名
  • 原文地址:https://www.cnblogs.com/gaidy/p/11887094.html
Copyright © 2011-2022 走看看