zoukankan      html  css  js  c++  java
  • go结构体struct

    定义结构体

    type struct_variable_type struct {
        member definition
        member definition
        ...
        member definition
    }
    

    比如

    type person struct {
        name string
        age  uint
    }
    

    访问结构体成员

    无论是struct对象还是指针都是通过点号.操作符访问结构体成员:

    package main
    
    import (
        "fmt"
    )
    
    type person struct {
        name string
        age  uint
    }
    
    func main() {
        var p = person{"rancheng", 25}
        var p2 = &p
        fmt.Println(p.name, p.age)
        fmt.Println(p2.name, p2.age)
    }
    

    方法

    在Go语言中,将函数绑定到具体的类型中,则称该函数是该类型的方法,其定义的方式是在func与函数名称之间加上具体类型变量,这个类型变量称为方法接收器,如:

    package main
    
    import (
        "fmt"
    )
    
    type person struct {
        name string
        age  uint
    }
    
    func (p *person) isAdult() bool {
        return p.age > 18
    }
    
    func main() {
        var p = person{"rancheng", 25}
        fmt.Println(p.isAdult())
    }
    

    注意事项:

    • go中不支持重载,所以相同类型的方法名不能重复。
    • struct结合它的方法就等价于面向对象中的类。只不过struct可以和它的方法分开,并非一定要属于同一个文件,但必须属于同一个包。
    • 方法的receiver type并非一定要是struct类型,type定义的类型别名、slice、map、channel、func类型等都可以。但内置简单数据类型(int、float等)不行,interface类型不行。

    继承(匿名组合)

    在go中可以用匿名字段的方式实现继承,可以多继承,当出现二义性时需手动写明是用的哪个父类的方法或字段,这一点跟C++一样:

    package main
    
    import (
    	"fmt"
    )
    
    type P1 struct {
    	n int
    }
    
    func (p *P1) Num() int {
    	return p.n
    }
    
    type P2 struct {
    	n int
    }
    
    func (p *P2) Num() int {
    	return p.n
    }
    
    type Child struct {
    	P1
    	P2
    	n int
    }
    
    func (p *Child) Num() int {
    	return p.n
    }
    
    func main() {
    	p1 := P1{1}
    	p2 := P2{2}
    	c := Child{P1{1}, P2{2}, 1}
    	fmt.Println(p1.Num())
    	fmt.Println(p2.Num())
    	fmt.Println(c.Num())
    }
    
  • 相关阅读:
    Linux系统类别
    ST-GCN基于skeleton的动作识别
    (gcc/g++)/clang/cl编译器
    羽毛球经典教材范例
    opencv批量读取图片
    十六、mysql 变量
    十五、mysql 存储过程
    十四、mysql 视图
    十三、mysql TCL语言
    十二、mysql 标识列
  • 原文地址:https://www.cnblogs.com/HachikoT/p/13915525.html
Copyright © 2011-2022 走看看