目录
  • 概述
  • 语法
    • 结构体定义的三种形式
      • 第一种【基本的实例化】
      • 第二种【指针类型的结构体】
      • 第三种【取结构体的地址实例化,通过&的操作】
    • 初始化结构体
      • 键值对初始化结构体
      • 值列表填充结构体
      • 匿名结构体
      • 访问结构体成员
      • 结构体作为函数参数
      •  结构体指针
      • 添加结构体方法
  • 总结
    • 示例

      概述

      结构体是由一系列具有相同类型或不同类型的数据构成的数据集合

      语法

      定义结构体【标识自定义结构体的名称,在同一个包内不能重复】

      type 结构名 struct {
        字段1: 字段1的值,
        字段2: 字段2的值,
        ......
      }
      

      例子

      //学生
      type Student struct {
        Name string   //姓名
        Age int       //年龄
        Sex bool      //性别 true:男    false:女
      }
      

      结构体定义的三种形式

      第一种【基本的实例化】

      var stu Student
      

      第二种【指针类型的结构体】

      var stu *Student = new(Student)
      

      第三种【取结构体的地址实例化,通过&的操作】

      var stu *Student = &Student{}
      

      初始化结构体

      键值对初始化结构体

      键值之间以:分隔;键值对之间以,分隔

      变量名 := 结构体类型名{
          字段1: 字段1的值,
          字段2: 字段2的值,
          ……
      }

      例子

      stu3 := Student{
        Name: "李四",
        Age: 18}
      

      值列表填充结构体

      没有字段,按着序列,必须全部填充

      变量名 := 结构体类型名{
          字段1的值,
          字段2的值,
          ……
      }

      stu4 := Student{
        "王五",
        18,
        true,
      }
      

      匿名结构体

      定义结构体时同时赋值

      变量名 := struct{
          字段1: 字段类型1,
          字段2: 字段类型2,
          ……
      }{
          // 字段值初始化
          字段1: 字段1的值,
          字段2: 字段2的值,
          ……
      }

      stu5 := struct {
        Name string
        Age  int
      }{
        Name: "王五",
        Age:  18,
      }
      

      访问结构体成员

      赋值、访问都使用”.”点这个符号

      结构体.字段

      var stu Student
      stu.Name="张三"         //赋值
      stu.Age=18
      stu.Sex=true
      
      fmt.Println(stu.Age)   //访问
      

      结构体作为函数参数

      func 函数名([结构体变量、结构体指针变量]){}
      
      func printStudent(stu Student) {}
      func printStudent(stu *Student) {}
      

       结构体指针

      使用结构体指针访问结构体成员,使用 “.” 操作符。

      var 变量名 *结构名
      
      var stu1 *Student = new(Student)
      stu1.Name = "李四"
      stu1.Age = 20
      stu1.Sex = false
      

      添加结构体方法

      给结构体添加方法,在func和方法名之间加一个括号,加入该结构体的指针引用【也可以是值引用】

      func ([结构体名]) 方法名([参数列表])[返回值列表]{}
      

      例子

      var stu Student
      stu.Name = "张三"
      stu.Age = 18
      stu.Sex = false
      
      //调用
      stu.sayHi()
      
      //添加结构体方法
      func (stu Student) sayHi() {
      	fmt.Println(stu.Name, "Hi")
      }
      

      总结

      golang是非面向对象语言,也可以说go语言中的结构体类似java中的类,但是很明显缺少继承多态等等OO的特性

      指针变量通过.访问结构体成员,如果是C或者C++一定要通过*访问,这是Go对它的一个优化

      示例

      package main
      import "fmt"
      //定义结构体【标识自定义结构体的名称,在同一个包内不能重复】
      type Student struct {
      	Name string
      	Age  int
      	Sex  bool
      }
      func main() {
      	//struct定义的三种形式
      	var stu Student
      	stu.Name = "张三"
      	stu.Age = 18
      	stu.Sex = false
      	fmt.Println(stu)
      	var stu1 *Student = new(Student)
      	stu1.Name = "李四"
      	stu1.Age = 20
      	stu1.Sex = false
      	fmt.Println(stu1)
      	var stu2 *Student = &Student{}
      	stu2.Name = "王五"
      	stu2.Age = 55
      	stu2.Sex = true
      	fmt.Println(stu2)
      	//初始化结构体
      	stu3 := Student{
      		Name: "李四",
      		Age:  18}
      	fmt.Println(stu3)
      	stu4 := Student{
      		"王五",
      		18,
      		true,
      	}
      	fmt.Println(stu4)
      	//匿名结构体
      	stu5 := struct {
      		Name string
      		Age  int
      	}{
      		Name: "王五",
      		Age:  18,
      	}
      	fmt.Println(stu5)
      	// printStudent(stu)
      	printStudent(stu1)
      	stu.sayHi()
      }
      //添加结构体方法
      func (stu Student) sayHi() {
      	fmt.Println(stu.Name, "Hi")
      }
      // func printStudent(stu Student) {
      // 	fmt.Println(stu.Name, stu.Age, stu.Sex)
      // }
      func printStudent(stu *Student) {
      	fmt.Println(stu.Name, stu.Age, stu.Sex)
      }
      

      以上就是Go语言基础结构体用法及示例详解的详细内容,更多关于Go语言结构体的资料请关注其它相关文章!

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。