当前位置: 首页 > news >正文

萝岗区网站建设推广音乐分享 wordpress

萝岗区网站建设推广,音乐分享 wordpress,重庆网上核名,公司邮箱怎么注册流程面向对象编程 golang与其它语言在面向对象编程问题上,区别明显的一点是,golang没有class,而是用struct golang的面向对象编程特点 golang支持面向对象编程(OOP),但是跟传统的差距有区别,并不是纯…

面向对象编程

golang与其它语言在面向对象编程问题上,区别明显的一点是,golang没有class,而是用struct

golang的面向对象编程特点

  1. golang支持面向对象编程(OOP),但是跟传统的差距有区别,并不是纯粹的面向对象语言。
  2. golang没有class(类),struct和其它语言的class有相同的效果,所以golang是基于struct来实现OOP特性的
  3. golang的OOP是很简洁的,不存在重载,构造函数,this,析构函数等
  4. Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有extends关键字,继承是通过匿名字段来实现。
  5. Golang面向对象(OOP)很优雅,OOP本身就是语言类型系统(type system)的一部分,通过接口(interface)关联,耦合性低,也非常灵活。后面同学们会充分体会到这个特点。也就是说在Golang中面向接口编程是非常重要的特性。

面向对象编程的快速入门

古风有人来袭~

  1. 事物均有门类,同门类之物必有共通之处
  2. 提取共通之处,以其创建结构体struct(数据结构)
  3. 再用结构体创建诸多实例/对象(变量)来代表某物
    说白了,就是把一类物体的都有的东西提取出来,构成一个结构体,来定义这类物体中的特定物体
    type Stu struct {
    name string
    age int
    }

func main() {
a := make(map[string]Stu, 2)
stu1 := Stu{“aaa”, 1}
stu2 := Stu{“bbb”, 2}
a[“stu1”] = stu1
a[“stu2”] = stu2
fmt.Println(a)
}

说明,学生这类物体都有名字和年龄对吧,那把这两个提取出来构成Stu结构体,stu1和stu2都是学生这类物体中的特定物体,用Stu结构体创建stu1和stu2即可,再输入相应的name和age即可

另外,在定义struct时,如果struct名字开头是大小,则这个struct是公开的,struct中的变量开头如果是大小,说明这个变量是公开的,小写则私有

struct的内存分布

由于golang中的struct是值类型,当声明一个 struct 变量时,内存中会直接存储这个 struct 的完整值(所有字段的值)
struct 变量直接包含它的数据,而不是包含指向数据的指针
只有当显式使用指针时(*MyStruct)才会涉及指向内存地址的概念

结构体声明

type 结构体名称 struct{
字段1,字段1类型
字段2,字段2类型
}

如果struct名开头是大小,则这个struct是公开的,struct中的变量开头如果是大小,说明这个变量是公开的,小写则私有
字段的类型可以是基本数据类型,可以是数组,可以是引用数据类型

结构体使用注意事项

  1. 创建一个结构体变量后,如果没给字段赋值,那就是默认值
    map,slice,指针的默认值是nil,如果要map,slice这类字段,需要先make一下
  2. struct是值类型,所以每个struct变量相互独立

但是!!!如果struct变量内部的字段是引用类型的,那么这个字段就是共享的,如果是值类型的字段就不是共享的
d1 := Data{
Slice: []int{1, 2, 3},
Map: map[string]int{“a”: 1},
Ptr: new(int),
}
*d1.Ptr = 10

// 赋值
d2 := d1 // 拷贝 d1 的所有字段(包括引用类型字段的指针)

// 修改 d2 的引用类型字段
d2.Slice[0] = 100 // 修改会影响 d1.Slice
d2.Map[“a”] = 200 // 修改会影响 d1.Map
*d2.Ptr = 20 // 修改会影响 d1.Ptr

fmt.Println(d1.Slice) // [100 2 3]
fmt.Println(d1.Map) // map[a:200]
fmt.Println(*d1.Ptr) // 20
输出结果为:
[100 2 3]
map[a:200]
20

可见,引用字段是被共享的

创建结构体变量的方式(结构体名字以Person为例)

type Person struct {
Name string
Age int
}

  1. var person Person
  2. person := Person{}
  3. var person *Person = new(Person)new 是 Go 语言中的一个内置函数,用于分配内存并返回指针

这种用法下,一般来说赋值语句应该是(*person).Name = “sss”。但是,golang允许person.Name = "sss"的形式,因为它在底层已经帮程序员加上了取值了。但是这仅限于赋值语句,在输出时,fmt.Println(person)这样的语句会输出&{sss 1},要想正常输出,所需的代码是fmt.Println(*person),输出结果为:{sss 1}

  1. var person *Person = &Person{}

与3有同样的解释

所有的括号写法,都可以直接在括号内,将字段直接赋值

struct的使用细节

  1. 结构体的所有字段在内存里面是连续分布的
  2. 结构体之间如果要想强制转换,那就必须满足内部所有字段的个数相同,名字类型都一一对应
  3. type重新定义:结构体重新定义名称,但是字段不变,golang就会认为是不同的数据结构,并且这种情况可以进行强制转换
  4. struct的每个字段上,可以写上一个tag,该tag可以通过反射机制获取,常见的使用场景就是序列化和反序列化。
    这些字段在转成json时,可以变成tag标注的值,更便于交互
http://www.dtcms.com/a/468635.html

相关文章:

  • 简述如何让网站排名快速提升网上接活做的网站
  • 网站制作模板教案整站seo排名要多少钱
  • 商品展示型网站有哪些深圳求职招聘网站
  • 摄影网站模版北京seo招聘信息
  • 广西麒铭建设有限公司网站科协科普网站建设
  • 门户网站维护广西住房和城乡建设厅三类人员继续教育
  • 中山网站软件wordpress 浮动 插件
  • 如何建设社区网站首页深圳网站建设服务哪家好
  • 小型网站的建设与开发网站主机与服务器吗
  • 建设校园网站公司wordpress 一站多主题
  • 私做网站名电子章呼伦贝尔网站建设 设计
  • 网站建设季度考核评价工作总结怎么做网站海外运营推广
  • 临淄网站设计深圳外贸soho网站建设
  • 百度关键词模拟点击软件重庆网站排名优化
  • 在那个网站找模具做网站运营专员做什么
  • 先做网站后备案吗网站怎么免费建站
  • 企业seo推广没内容的网站怎么优化
  • 网站空间怎么备份seo内部优化
  • 广州外贸营销型网站建设怎么做一个购物平台网站
  • 电子商务网站建设实训内容设计网站推荐 zoo
  • c 网站开发 简单例子镇江微信推广平台
  • 网页编成网站沙坪坝网站建设公司选哪家好
  • 部分网站dns解析失败wordpress 后台制作
  • 小程序做视频网站wordpress中文下载方法
  • 西塞山区建设局网站重点专业建设网站 建设方案
  • 情侣博客网站模板下载合肥房产网58同城
  • 微网站开发语言专门做教育的视频网站
  • 塑胶 东莞网站建设网站要怎么做
  • 免费发广告的网站大全qq官方网站
  • 企业网站管理系统设置91人才网赣州招聘网