美文网首页
go学习笔记(4) - 结构体、接口

go学习笔记(4) - 结构体、接口

作者: 卡门001 | 来源:发表于2021-07-02 10:50 被阅读0次

    结构体与方法

    • 工厂函数返回局部变量地址
      func createNode(value int) *TreeNode {
         
      }
    
    • 结构体专有方法
    func (node TreeNode) print() 
    ...
    
    • 结体构综合示例
    package main
    
    import "fmt"
    
    //struct:结构体
    type TreeNode struct {
        value int
        Left,Right *TreeNode
    
    }
    
    //工厂方法,一般返回结构的地址
    func createNode(value int) *TreeNode  {
        return &TreeNode{value: value}
    }
    
    //等同一起func print(node TreeNode) {
    //代码该方法是由TreeNode使用
    func (node TreeNode) print() {
        fmt.Print(node.value)
    }
    
    //go函数都是传值
    //要解决TreeNode中value在main中使用,用指定
    func (node *TreeNode) setValue(value int) {
        node.value = value
    }
    
    //代码该方法是由TreeNode使用
    func print(node TreeNode) {
        fmt.Print(node.value)
    }
    
    func main() {
        var root TreeNode;
        root = TreeNode{value: 0}
        root.Left = &TreeNode{}
        root.Right = &TreeNode{2,nil,nil}
        root.Right.Right = new(TreeNode)
        root.Left.Right = createNode(12)
    
        root.print()
        root.Right.Left.setValue(4)
        root.Right.Left.print()
        fmt.Println("")
    }
    

    接口

    package main
    
    import "fmt"
    
    //定义1个接口student,它包含1个 StudentName 方法
    type student interface {
        StudentName() string
        Gender() int
    }
    
    //2、定义结构体
    type StudentImp struct {
        name string //一个返回值对应接口的一个方法近回
        gender int
    }
    
    //3.给结构体绑定一个方法 StudentName。表示它实现了 student接口
    func (s StudentImp) StudentName() string{
        return s.name
    }
    
    //4.给结构体绑定一个方法 Gender。表示它实现了 student接口
    func (s StudentImp) Gender() int{
        return s.gender
    }
    
    //5. 使用
    func main() {
        //1. 实例化结构体
        imp := StudentImp{}
        imp.name = "nian"
        imp.gender = 1
    
        //2. 再实例化一下interface
        var myStudent student
    
        //3. 将结构体赋给接口变量
        myStudent = imp
    
        //4. 调用接口变量的值
        fmt.Println(myStudent.Gender())
    }
    

    问题集锦

    new与make

    1. new只分配内存,make只用于slice,map,和channel的初始化
    2. new(T) 返回的是 T 的指针
    3. 慎重使用new, 建议使用make来初始化map

    • 为同一个结构定义的方法必须在一个包内完成
    • 每个目录一个包
    • main为特殊包
    • import时的包名由 go.mod中定义的前缀+package 名
    • 扩展已有类型
      • 使用组合的方式
      • 用别名的方式
      • 使用内嵌的方式

    相关文章

      网友评论

          本文标题:go学习笔记(4) - 结构体、接口

          本文链接:https://www.haomeiwen.com/subject/ymnkultx.html