go中结构体基本概念

一 问题引出

张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫猫。

二 使用现有技术解决

1 单独的定义变量解决

2 使用数组解决

3 代码

// 1 使用变量的处理
var cat1Name string = "小白"
var cat1Age int = 3
var cat1Color string = "白色"
var cat2Name string = "小花"
var cat2Age int = 100
var cat2Color string = "花色"
// 2 使用数组解决
var catNames [2]string = [...]string{"小白", "小花"}
var catAges [2]int = [...]int{3, 100}
var catColors [2]string = [...]string{"白色", "花色"}

4 现有技术解决的缺点分析

a 使用变量或者数组来解决养猫的问题,不利于数据的管理和维护。因为名字、年龄、颜色都是属于一只猫,但是这里是分开保存。

b 如果希望对一只猫的属性(名字、年龄,颜色)进行操作,也不好处理。

c  结构体可以解决上面两个问题。

三 Golang 语言面向对象编程说明

1 Golang 也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说 Golang 支持面向对象编程特性是比较准确的。

2 Golang 没有类(class),Go 语言的结构体(struct)和其它编程语言的类(class)有同等的地位,可以理解 Golang 是基于 struct 来实现 OOP 特性的。

3 Golang 面向对象编程非常简洁,去掉了传统 OOP 语言的继承、方法重载、构造函数和析构函数、隐藏的 this 指针等等。

4 Golang 仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它 OOP 语言不一样,比如继承,Golang 没有 extends 关键字,继承是通过匿名字段来实现。

5 Golang 面向对象(OOP)很优雅,OOP 本身就是语言类型系统(type system)的一部分,通过接口(interface)关联,耦合性低,也非常灵活。也就是说在 Golang 中面向接口编程是非常重要的特性。

四 结构体与结构体变量(实例/对象)的关系示意图

说明

1 将一类事物的特性提取出来(比如猫类), 形成一个新的数据类型,就是一个结构体。

2 通过这个结构体,我们可以创建多个变量(实例/对象)。

3 事物可以是猫类,也可以是 Person 类, Fish 类或是某个工具类。

五 快速入门

1 代码

package main

import (
   "fmt"
)

// 定义一个 Cat 结构体,将 Cat 的各个字段/属性信息,放入到Cat结构体进行管理
type Cat struct {
   Name   string
   Age    int
   Color  string
   Hobby  string
   Scores [3]int // 字段是数组
}

func main() {
   // 创建一个Cat的变量
   var cat1 Cat // var a int
   fmt.Printf("cat1的地址=%p\n", &cat1)
   cat1.Name = "小白"
   cat1.Age = 3
   cat1.Color = "白色"
   cat1.Hobby = "吃<・)))><<"
   fmt.Println("cat1=", cat1)
   fmt.Println("猫猫的信息如下:")
   fmt.Println("name=", cat1.Name)
   fmt.Println("Age=", cat1.Age)
   fmt.Println("color=", cat1.Color)
   fmt.Println("hobby=", cat1.Hobby)
}

2 测试

cat1的地址=0xc042086000

cat1= {小白 3 白色 吃<・)))><< [0 0 0]}

猫猫的信息如下:

name= 小白

Age= 3

color= 白色

hobby= 吃<・)))><<

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值