Go语言中的结构体

有些话、适合烂在心里 提交于 2020-02-04 00:48:39

Go语言结构体

  • struct里面可以包含多个字段(属性)
  • struct类型可以定义方法,注意和函数的区分
  • struct类型是值类型
  • struct类型可以嵌套
  • struct中的所有字段在内存是连续的
  • 结构体是用户单独定义的类型,不能和其他类型进行强制转换
  • struct没有构造函数,一般可以使用工厂模式来解决这个问题
    • 工厂模式也就是定义一个全局函数,传入一些参数,返回一个结构体
  • 结构体中字段可以没有名字,即匿名字段
    • 此时如果匿名字段是一个结构,即讲解实现了继承
  • struct中的每个字段,写上一个tag。这个tag可以通过反射的机制获取到,最常用的场景就是json序列化和反序列化
package main

import (
	"encoding/json"
	"fmt"
)

type Student struct {
	Name  string `json:"student_name"`
	Age   int    `json:"age"`
	Score int    `json:"score"`
}

func main() {
	var stu Student = Student{
		Name:  "stu01",
		Age:   18,
		Score: 80,
	}

	// 把这个结构体打包
	data, err := json.Marshal(stu)
	if err != nil {
		fmt.Println("json encode stu failed, err:", err)
		return
	}

	fmt.Println(string(data))
}

输出:(输出的字段变为tag字段了)
{“student_name”:“stu01”,“age”:18,“score”:80}

  • 初始化
var stu Student
var stu *Student = new (Student)
var stu *Student = &Student{}
type Student struct{
	Name string
	Age int
	score float32 //同样有大小写
}

func main()  {
	var stu Student

	stu.Age = 18
	stu.Name = "周杰伦"
	stu.score = 80

	var stu1 *Student = &Student{
		Age:20,
		Name:"林秀贤",
	}

	var stu2 =Student{
		Age:20,
		Name:"李之胜",
	}

	fmt.Println(stu)
	fmt.Println(stu1)
	fmt.Println(stu2)
}
  • 方法:Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以
    有方法,而不仅仅是struct
    func (recevier type) methodName(参数列表)(返回值列表){}
type A struct {
        a int
}

func (t A) test() {        
	 fmt.Println(t.a)
}

var t A
t.test()
- 方法和函数的区别
	函数调用: function(variable, 参数列表)
	方法:variable.function(参数列表)
  • 如果一个变量实现了String()这个方法,那么fmt.Println默认会调用这个
    变量的String()进行输出。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!