首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Golang之旅34-struct3

Golang之旅34-struct3

作者头像
皮大大
发布2021-03-02 16:04:45
发布2021-03-02 16:04:45
4920
举报
golang面向对象编程
  1. Golang也是支持对象编程OOPGolang支持面向对象编程特性
  2. Golang没有类class通过结构体来实现面向对象编程
  3. Golang的面向对象编程非常简单,没有继承、方法重载、构造函数和析构函数等;Golang的继承是通过匿名字段来实现
  4. Golang是面向对象接口编程的,耦合性低
结构体demo
  • 一类事物的特性提取出来(比如猫类),形成一个新的数据类型,就是一个结构体
  • 通过结构体来创建多个变量(实例对象)
  • 事物可以是Cat,Person,Fish等不同的类
  • 通过typestruct来进行定义
  • 结构体是值类型,默认是值拷贝
代码语言:javascript
复制
package main
import "fmt"

// 创建一个 Cat 结构体:将猫的各种信息放入Cat结构体中进行管理
type Cat struct{
  Name string
  Age int
  Color string
}

func main(){
  // 创建一个 Cat 的变量实例
  var cat1 Cat   // var a int
  cat1.Name = "小白"
  cat1.Age = 18
  cat1.Color = "白色"
  fmt.Println("cat1=", cat1)

  // 猫的信息
  fmt.Println("name=", cat1.Name)
  fmt.Println("age=", cat1.Age)
  fmt.Println("color=", cat1.Color)
}

总结

  • 结构体是自定义的数据类型,代表的是一类事物
  • 结构体变量(实例)是具体的,实际的,代表的是一个具体变量
结构体声明
  • 字段声明的语法同变量是一样的
  • 字段的类型可以是:基本类型、数组或者引用类型
  • 创建一个结构体变量后,如果么有给字段赋值,对应为零值
    • 布尔对应为false
    • 数值是0
    • 字符串是“”
    • 指针、切片和map 的零值都是nil,还没分配空间,需要用make进行初始化
  • 不同结构体变量的字段是相互独立的,互不影响;一个字段的修改不会影响到另一个
代码语言:javascript
复制
// 声明结构体

type 结构体名称 struct{
  field1 type
  field2 type
}

// 栗子
type Student struct{   // 定义了一个Student结构体,大写表示能外部引用
  Name string   // 定义3个字段或属性
  Age int
  Score float32
}
代码语言:javascript
复制
package main
import "fmt"

type Person struct{
  Name string
  Age int
  Scores [5]float64  // 数组类型
  ptr *int  // 指针
  slice []int  // 切片
  map1 map[string]string  // map
}

type Monster struct{
  Name string
  Age int
}

// 指针、切片和map 的零值都是nil,还没分配空间,需要用make进行初始化

func main(){
  // 定义结构体变量
  var p1 Person
  if p1.ptr == nil{   // 3个都是 nil;还没有进行初始化
    fmt.Println("ok1")
  }
  if p1.slice == nil{
    fmt.Println("ok2")
  }
  if p1.map1 == nil{
    fmt.Println("ok3")
  }

  // 使用slice:初始化再使用
  p1.slice = make([]int, 10)
  p1.slice[0] = 100

  // 使用map:先初始化
  p1.map1 = make(map[string]string)
  p1.map1["key1"] = "tom"
  fmt.Println(p1)

  var monster1 Monster
  monster1.Name = "小红"
  monster1.Age = 28

  monster2 := monster1
  monster2.Age = 20

  // 结构体是值类型,默认是值拷贝
  fmt.Println("monster1", monster1)   // 28
  fmt.Println("monster2", monster2)   // 20
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • golang面向对象编程
  • 结构体demo
  • 结构体声明
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档