结构体struct 1年前

编程语言
960
结构体struct

Go 语言结构体 struct

在Go语言中,表示数据有多种方式

Go语言结构体可以表示多种不同类型数据,可以说结构体是不同类型数据的集合

所以,Go语言中,表示数据分以下方式

  1. 表示单个的数据,可以定义一个变量
  2. 表示同一类型的多个数据,可以定义数组
  3. 表示不同类型的多个数据,可以定义结构体

1 什么是Go语言结构体?

Go语言结构体,是不同数据类型的集合,也是用户自定义的类型

比如一本书,有书名,有价格,有页数,有作者

2 如何定义Go语言结构体?

定义Go语言结构体,使用关键字 type, struct 这两个关键字

语法如下:

type 结构体名字 struct {
    
}

示例1 :定义书的结构体

type Book struct {
    name   string    //书的名字
    price  float32    //书的价格
    author string    //书的作者
}

3 如何访问Go语言结构体?

以上面的 Book 为例子,我们定义一个 Book 结构体变量,赋值并打印

如下示例:使用var 定义结构体变量并访问

package main

import "fmt"

type Book struct {
    name   string    //书的名字
    price  float32    //书的价格
    author string    //书的作者
}

func main() {
    var book Book
    book.name = "Go语言入门教程"
    book.price = 55
    book.author = "待兔"

    fmt.Println(book.name,book.price,book.author)
}

//输出如下:
Go语言入门教程 55 待兔

由上可以,结构体访问内部的变量,用 . 操作符

上面用 var book Book 这种方式组定义结构体变量,同样的,也可以使用 := 直接定义并赋值

如下示例: 使用 := 定义结构体

package main

import "fmt"

type Book struct {
    name   string  //书的名字
    price  float32 //书的价格
    author string  //书的作者
}

func main() {
    book := Book{
        name:   "Go语言入门教程",
        price:  55,
        author: "待兔",
    }
    
    fmt.Println(book.name, book.price, book.author)
}

//输出如下:
Go语言入门教程 55 待兔

由上可知:使用 := 定义结构体变量时,必须对结构体字段进行初始赋值,并且这种方式,对字段的赋值,使用 :

除了以上的方法,我们还可以定义结构体变量的指针,也就是定义一个指针,指针结构体的变量

如下示例 定义结构体变量的指针

package main

import "fmt"

type Book struct {
    name   string  //书的名字
    price  float32 //书的价格
    author string  //书的作者
}

func main() {
    book := new(Book)
    book.name = "Go语言入门教程"
    book.price = 55
    book.author = "待兔"

    fmt.Println(book.name, book.price, book.author)
}

//输出如下:
Go语言入门教程 55 待兔

Go语言中也是有指针的,并且通过指针访问结构体的变量,也是使用 . 操作符,和直接用 var 声明的结构体变量一样。

Go语言中的指针大大简化了,使用要比 C 语言中的指针简单很多,并且 C 语言中访问变量使用 -> 符号

4 Go语言结构体相当于其它语言中的类

Go语言中的结构体和其它语言,比如 Java, C++, Python 等里面的 类 是一样的

所以结构体中,也有方法

语法如下:

func (r ReceiverType) show(){ ... }

上面是 ReceiverType 是接收者的类型,比如 Book , r就是当前的实例

如下示例,我们给 Book 添加一个 show 方法

package main

import "fmt"

type Book struct {
    name   string  //书的名字
    price  float32 //书的价格
    author string  //书的作者
}

// 1 给 Book 结构体添加一个方法
func (b Book) show(){
    fmt.Println(b.name,b.price,b.author)
}

func main() {
    var book Book
    book.name = "Go语言入门教程"
    book.price = 55
    book.author = "张三"

    // 2 调用 Book 的方法
    book.show()
}

//输出如下:
Go语言入门教程 55 待兔

从上面可知,Go语言中是通过结构体实现了其它语言中的类,叫结构体也好,叫类也罢,本质没变,都是一个意思

和其它语言不同的时,给结构本中添加方法,语法形式和其它语言有比较大的差别,没关系,多写几遍,就记住了。

我们也可以把func (b Book) show(){ ... } 改成 fun (b *Book) show() { ... } ,也就是说接收者从 Book 类型,变成了 *Book

接收者变成了一个指针了。但是用法和上面的一样。

这里就不再举例。

小结

Go语言的结构体就讲到这了,用法也很简单。下面简单总结一下:

  1. 结构体是多种不同类型的数据的集合

  2. 结构体的定义语法为:

    type 结构体名字 struct { } ,比如定义一个Book

    type Book struct {
        name   string  //书的名字
        price  float32 //书的价格
        author string  //书的作者
    }
    
  3. 定义结构体变量可以使用下面方式

    • var book Book
    • book := Book { ... }
    • book := make(Book)
  4. 访问结构体中的成员,使用 . 符号,比如 book.name ,不管 book 是变量还是指针变量,都可以。

  5. Go 语言中的结构体相当于其它语言中的

  6. Go 语言中的结构体 可以有方法,添加方法语法: func (r ReceiverType) show(){ ... }

image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2222593
累计阅读

热门教程文档

Dart
35小节
Djiango
17小节
Golang
23小节
Lua
21小节
Java
12小节