golang基础教程

一、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、基本语法

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

示例:

type Student struct {Name string //字段
Age int //字段
Score float32
}

2、字段/属性

  1. 从概念或叫法上看: 结构体字段 = 属性 = field
  2. 字段是结构体的一个组成部分,一般是基本数据类型、数组,也可是引用类型。比如我们前面定
    义猫结构体 的 Name string 就是属性

在创建一个结构体变量后,如果没有给字段赋值,都对应一个零值(默认值),规则同前面讲的
一样:
布尔类型是 false ,数值是 0 ,字符串是 “”。
数组类型的默认值和它的元素类型相关,比如 score [3]int 则为[0, 0, 0]
指针,slice,和 map 的零值都是 nil ,即还没有分配空间。

  1. 不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,不影响另外一个, 结构体
    是值类型。

三、创建结构体变量和访问结构体字段

方式 1-直接声明

var person Person

方式 2-{}

var person Person = Person{}

方式 3-&

var person *Person = new (Person)

方式 4-&{}

var person *Person = &Person{}

综合示例:

type Person struct {Name stringAge int
}
func main() {var p1 Personp1.Name="jerry"p1.Age=55fmt.Printf("p1的值:%v\n",p1)var p2 Person= Person{Name:"susan",Age:10}fmt.Printf("p2的值:%v\n",p2)var p3 *Person = new(Person)p3.Name="jeck"p3.Age=66fmt.Printf("p3的值:%v\n",p3)var p4 *Person= &Person{Name:"john",Age:88}fmt.Printf("p4的值:%v\n",p4)
}

总结:

  1. 第 3 种和第 4 种方式返回的是 结构体指针。
  2. 结构体指针访问字段的标准方式应该是:(*结构体指针).字段名 ,比如 (*person).Name = “tom” 3) 但 go 做了一个简化,也支持 结构体指针.字段名, 比如 person.Name = “tom”。更加符合程序员
    使用的习惯,go 编译器底层 对 person.Name 做了转化 (*person).Name。
  3. 结构体的所有字段在内存中是连续的
  4. 结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(名字、个数和类
    型)
  5. 结构体进行 type 重新定义(相当于取别名),Golang 认为是新的数据类型,但是相互间可以强转
type Person struct {Name stringAge int
}
type ps Person
func main() {var p1 psp1.Name="jerry"p1.Age=55fmt.Printf("p1的值:%v\n",p1)var p2 Person= Person(p1)fmt.Printf("p2的值:%v\n",p2)
}
  1. struct 的每个字段上,可以写上一个 tag, 该 tag 可以通过反射机制获取,常见的使用场景就是序
    列化和反序列化。

golang基础教程(十)、结构体相关推荐

  1. c++ 结构体中不同类型的初始值_Golang语言基础教程:结构体

    1.1 什么是结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型.结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 1.2 结构体的定义和初始化 ...

  2. golang基础教程(十五)文件操作

    golang基础教程 一.文件的基本介绍 文件的概念 文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的 word 文档,txt 文 件,excel 文件-都是文件.文件最 ...

  3. golang基础教程

    目录 golang基础教程(一).环境搭建 golang基础教程(二).开发规范及API golang基础教程(三).变量与数据类型概述 golang基础教程(四).基本数据类型 golang基础教程 ...

  4. 换个语言学一下 Golang (9)——结构体和接口

    换个语言学一下 Golang (9)--结构体和接口 基本上到这里的时候,就是上了一个台阶了.Go的精华特点即将展开. 结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就 ...

  5. go 修改结构体方法_「GCTT 出品」Go 系列教程——26. 结构体取代类

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Go 支持面向对象吗? Go 并不是完全面向对象的编程语言.Go 官网的 FAQ 回答了 Go 是否是面向对象语言,摘 ...

  6. C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例

    C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例 目录 一.简单介绍 二.结构体定义和使用 三. ...

  7. C语言 实验十 结构体

    C语言 实验十 结构体 一.实验目的 1.掌握结构类型变量与数组的定义和使用. 2.掌握使用结构指针和结构变量名使用结构成员的方法. 3.初步掌握结构指针作函数参数的编程方法. 二.实验学时 4 学时 ...

  8. Golang教程:结构体

    结构体(struct)是用户自定义的类型,它代表若干字段的集合.有些时候将多个数据看做一个整体要比单独使用这些数据更有意义,这种情况下就适合使用结构体. 比如将一个员工的 firstName, las ...

  9. golang sqlx scan 到结构体中_Golang语言并发编程之定时器

    上一章中对于golang的常用关键字说明如下: 1 for 和 range 2 select 3 defer 4 panic 和 recover 5 make 和 new 接下来我们来对golang的 ...

最新文章

  1. Linux环境编程--多线程
  2. 主瓣、栅瓣和旁瓣的定义
  3. Python自动化开发学习的第十一周----WEB基础(jquery)
  4. mcgs组态软件中字体如果从左到右变化_昆仑通态专题(十一):MCGS嵌入式组态软件的脚本程序...
  5. pointnet与pointnet++
  6. python算法与数据结构-数据结构中常用树的介绍
  7. CodeForces - 287C Lucky Permutation(构造)
  8. linux下查询域名或IP注册信息的操作记录(whois)
  9. 如何隐藏地址栏中的真实地址_Firefox推出Private Relay插件:可隐藏真实邮箱地址...
  10. 怎么在html页面和js里判断是否是IE浏览器
  11. 第一次请领导喝酒,五百左右的白酒有哪些推荐?
  12. Fragment-传递参数
  13. MFC编码注意(2)
  14. c语言中有123f,C语言库函数(S类字母) - 3
  15. matlab做神经网络的步骤,matlab建立神经网络模型
  16. 《史蒂夫·乔布斯传》官方正式中文版电子书(高清晰完整版)
  17. iTween使用小坑
  18. 插上耳机没声音 程序包ID:Audioplaybackdiagnostic 错误代码:0x80070002 源:引擎 上下文:升级
  19. 物联网导论【刘云浩】-笔记总结
  20. matlab角点检测fast_AGAST角点检测算法:比FAST和FAST-ER更快

热门文章

  1. uniapp做小程序的图片(视频)上传的组件封装
  2. 2023年1月国产数据库大事记-墨天轮
  3. 第二章 关系数据结构及关系的完整性习题解析
  4. 测试报告的2个要点:1.测试结果与缺陷分析(功能、性能)2.测试结论与建议(项目概况、测试时间、测试情况、结论性汇总)
  5. 用DIV+CSS技术设计的体育主题网站(足球介绍)
  6. python经典程序练习题7:绘制一个红色的五角星图案
  7. Python中异常操作
  8. 《国际结算》期末试卷及参考答案
  9. 经纬财富:中山套单无需烦恼,解套有待学习
  10. Uicc之CatService