加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang基础-双链表、别名、自定义构造函数

发布时间:2020-12-16 09:44:58 所属栏目:大数据 来源:网络整理
导读:双链表 type Student struct { Name string Next * Student Prev * Student } 如果有两个指针分别指向前一个节点和后一个节点,我们叫做双链表 package main import "fmt" type Student struct { Name string Age int Score float32 left *Student right *St

双链表

type Student struct { Name string Next* Student Prev* Student }

如果有两个指针分别指向前一个节点和后一个节点,我们叫做双链表

package main

import "fmt"

type Student struct {
    Name  string
    Age   int
    Score float32
    left  *Student
    right *Student
}

func trans(root *Student) {
    if root == nil {
        return
    }
    fmt.Println(root)

    trans(root.left)
    trans(root.right)

}

func main() {
    var root *Student = new(Student)

    root.Name = "stu01"
    root.Age = 18
    root.Score = 100

    var left1 *Student = new(Student)
    left1.Name = "stu02"
    left1.Age = 18
    left1.Score = 100

    root.left = left1

    var right1 *Student = new(Student)
    right1.Name = "stu04"
    right1.Age = 18
    right1.Score = 100

    root.right = right1

    var left2 *Student = new(Student)
    left2.Name = "stu03"
    left2.Age = 18
    left2.Score = 100

    left1.left = left2

    trans(root)
}

进行递归判断输出如下:

PS E:golanggo_prosrcsafly> go run demo.go
&{stu01 18 100 0xc04203df80 0xc04203dfb0}
&{stu02 18 100 0xc04205a000 <nil>}
&{stu03 18 100 <nil> <nil>}
&{stu04 18 100 <nil> <nil>}
PS E:golanggo_prosrcsafly>

别名

结构体是用户单独定义的类型,不能和其他类型进行强制转换

package main

import "fmt"

type Student struct {
    Name  string
}
type Stu Student

type inte int

func main() {
    var a inte = 100
    var b int = 100
    b = int(a)
    fmt.Println(a,b)
    a = inte(b)
    fmt.Println(a,b)

    fmt.Println("--------------")
    var stu =  Student{"safly"}
    fmt.Println(stu)

    var stu1  = Stu{"sss"}
    fmt.Println(stu1)

    //强转
    stu = Student(stu1)
    fmt.Println(stu)

}

输出如下:

PS E:golanggo_prosrcsafly> go run demo.go
100 100
100 100
--------------
{safly}
{sss}
{sss}
PS E:golanggo_prosrcsafly>

工厂模式

olang中的struct没有构造函数,一般可以使用工厂模式来解决这个问题

make 用来创建map、slice、channel
new用来创建值类型

package main

import "fmt"

type student struct {
    Name string
 Age int
}

func main() {
    // S := new (student)
    var stu1 *student = NewStudent("tony", 20)
    fmt.Println(*stu1)

    stu2 := NewStudent("tony", 200)
    fmt.Println(*stu2)

    var stu3 = NewStudent("tony", 2990)
    fmt.Println(*stu3)

}
/*构造函数*/
func NewStudent(name string,age int) *student {
    return &student{
           Name:name,Age:age,}
    }

输出如下:

PS E:golanggo_prosrcsafly> go run demo.go
{tony 20}
{tony 200}
{tony 2990}
PS E:golanggo_prosrcsafly>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读