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

2021-07-02  本文已影响0人  卡门001

结构体与方法

  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

上一篇下一篇

猜你喜欢

热点阅读