ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Go语言结构体

2022-06-15 22:06:03  阅读:193  来源: 互联网

标签:right treeNode 语言 nil value receiver Go root 结构


1、结构体的定义

定义:type xxx struct

使用:var关键字创建、冒号:创建、new关键字创建

例如

package main

import "fmt"

type treeNode struct {
   value       int
   left, right *treeNode
}

func main() {

   var root treeNode         //var关键字创建
   fmt.Print(root)           //{0 <nil> <nil>}
   root = treeNode{value: 3} //直接赋值
   root.left = &treeNode{
      value: 0,
      left:  nil,
      right: nil,
   } //左节点
   root.right = &treeNode{5, nil, nil} //右节点
   root.right.left = new(treeNode)     //右节点的左节点 new关键字创建

   //结构体数组
   nodes := []treeNode{{3, nil, nil}, {}, {6, nil, nil}}
   fmt.Println(nodes)
}

2、结构体的方法

类似定义方法,前面有个接收者,其他就是正常的函数定义,表面该方法是给接收者使用的

如果是赋值,则接收者需要是传递地址,需要用*表示,使用引用传递

即:只有接收者指针才可以改变结构体内容

package main

import "fmt"

type treeNode struct {
	value       int
	left, right *treeNode
}

func (receiver treeNode) getValue() {
	//receiver 是接收者,说明getValue方法是给treeNode结构体使用的
	//就是一个普通函数
	fmt.Println(receiver.value)
}
func (receiver *treeNode) setValue(v int) {
	if receiver == nil {
		return
	}
	receiver.value = v
}

func main() {
	root := treeNode{1, nil, nil}
	root.left = &treeNode{value: 2}
	root.right = &treeNode{
		value: 3,
		left:  nil,
		right: nil,
	}
	n := new(treeNode)
	fmt.Println(n)
	n.setValue(4)
	fmt.Println(n)
	root.getValue()
	root.right.getValue()
}

ps:

遍历树

package main

import (
   "fmt"
)

type treeNode struct {
   value       int
   left, right *treeNode
}

func (receiver treeNode) getValue() {
   //receiver 是接收者,说明getValue方法是给treeNode结构体使用的
   //就是一个普通函数
   fmt.Println(receiver.value)
}
func (receiver *treeNode) setValue(v int) {
   if receiver == nil {
      return
   }
   receiver.value = v
}

func (receiver *treeNode) traverse() {
   //遍历
   if receiver == nil { //如果是nil则不继续遍历左节点,右节点 也不输出value 因为它没有value
      return
   }
   receiver.left.traverse()  //遍历自己的左节点
   print(receiver.value)     //打印自己的值
   receiver.right.traverse() //遍历自己的右节点
}

func main() {
   root := treeNode{1, nil, nil}
   root.left = &treeNode{value: 2}
   root.right = &treeNode{
      value: 3,
      left:  nil,
      right: nil,
   }
   n := new(treeNode)
   fmt.Println(n)
   n.setValue(4)
   fmt.Println(n)
   root.getValue()
   root.right.getValue()

   root.traverse() //遍历
}

3、值接收者和指针接收者

要改变内容,必须使用指针接收者

结构过大也要考虑指针接收者

一致性:如果有指针接收者,最好都是指针接收者(建议,不强制要求)

值接收者是go语言特有的

标签:right,treeNode,语言,nil,value,receiver,Go,root,结构
来源: https://www.cnblogs.com/rainbow-tan/p/16379933.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有