Golang结构体

Golang结构的使用

Go中的结构体与C语言的结构体相似,可以包括多种数据类型。但也增加了一些新的特性,便于开发人员的使用。

type Animal struct {
	name string
	age  int
	son *Animal
}

注意:

  1. Go语言中使用首字母的大小写控制访问,结构体中同样如此,小写的变量包外不可导出。
  2. 结构体中可以使用 *Animal 的形式定义一个指针类型来实现链表和树的数据结构,与C语言类似。
  3. 两个struct如果其成员变量相同但顺序不同也视为不同的struct
  4. 若结构体的所有成员变量是可比较的,则该结构体是可比较的。

1、结构体嵌套和匿名成员变量

结构体的嵌套是指将一个结构体作为另一个结构体的成员变量嵌套在其中,复用共同的地方。匿名成员变量则是指不给变量命名,调用时直接调用最上层的成员变量。
e.g.

package main

import (
	"fmt"
)

type animal struct {
	name string
	age  int
}

type cat struct {
	//嵌套的匿名成员变量
	animal
	speed float64
}

type bird struct {
	animal
	weight float64
}

type eagle struct {
	bird
	flyHeight float64
}

func main() {
	//对嵌套成员变量的初始化,必须加上name
	a := cat{animal{"coco", 3}, 30}
	b := eagle{bird{animal{"KK", 4}, 20}, 2000}
	fmt.Println(a)
	fmt.Println(b)
	//‘#’表示
	fmt.Printf("%#v\n", a)
	fmt.Printf("%#v\n", b)
	fmt.Println(b.age)
}
//输出
// {{coco 3} 30}
// {{{KK 4} 20} 2000}
// main.cat{animal:main.animal{name:"coco", age:3}, speed:30}
// main.eagle{bird:main.bird{animal:main.animal{name:"KK", age:4}, weight:20}, flyHeight:2000}
// 4

2、结构体实现树形数据结构

例子中使用结构体构造了一个二叉树,实现插入排序,首先生成一个排序二叉树,再按照left、mid、left的顺序进行排序。

package main

import "fmt"

type tree struct {
	val  int
	l, r *tree
}

func main() {
	num := []int{9, 8, 7, 6, 5, 4, 3}
	num = sortTree(num)
	fmt.Println(num)
}

func sortTree(num []int) []int {
	var root *tree
	for _, v := range num {
		root = add(root, v)
	}
	num = num[:0]
	num = lmrFind(root, num)
	return num
}

//插入二叉树
func add(t *tree, val int) *tree {
	if t == nil {
		t = new(tree)
		t.val = val
		return t
	}
	if t.val > val {
		t.l = add(t.l, val)
	} else {
		t.r = add(t.r, val)
	}
	return t
}
//遍历二叉树
func lmrFind(t *tree, num []int) []int {
	if t != nil {
		num = lmrFind(t.l, num)
		num = append(num, t.val)
		num = lmrFind(t.r, num)
	}
	return num
}

你可能感兴趣的:(Golang基础知识,golang,开发语言,后端)