Fourth glance in Go

在Go里面的结构体和方法是很有意思的内容。它即和OO有点像,但又不完全一样。为什么这么说呢?当你把结构体映射为OO里面的类的时候,你给结构体添加方法,你就会发现其实方法与结构体并没有严格意义上的关系。在Go里面,方法是绑定到接受者上的。什么是接受者?一个对象,这个对象可以是任何类型,int,string, struct, interface ...。

func (t *Type) method_name(parameters) return type

但是同名的方法,在同一个类型上只能出现一次。而且该类型必须与方法在同一个包中。

另外一点是内嵌结构体的问题,方法是可以被继承的。也就是说一个结构体被内嵌到另一个结构体中,那么父结构体也就具有了内嵌结构体的方法

>>person.go
-------------------------------------------
package person

type Person struct {
    firstName string
    lastName  string
}

type BlackMan struct {
    Person
    color string
}

func (p *Person) FirstName() string {
    return p.firstName
}

func (p *Person) SetFirstName(newName string) {
    p.firstName = newName
}

>>main.go
--------------------------------------------------
package main

import (
    "./person"
    "fmt"
)

func main() {
    p := new(person.BlackMan)
    p.SetFirstName("Ace")
    fmt.Println(p.FirstName())
}

一张图说明OO里面的继承体系与Go里面的继承体系区别

发现一个奇怪的问题:使用相同的方法去分配内存,得出的结果却截然不同

func main() {
    var n [1024 * 1024 * 1024]int
    n[0] = 1

    m := new(runtime.MemStats)
    runtime.ReadMemStats(m)
    fmt.Printf("%d\n", m.Alloc/1024)
}

这样程序的输出是占用8G空间,如果是1024 * 1024,输出则是 36K的空间占用。为什么?

Go中接口的指针方法和值方法的区别:

Pointer methods can be called with pointers.
• Value methods can be called with values.
• Value-receiver methods can be called with pointer values because they can be dereferenced
first.
• Pointer-receiver methods cannot be called with values, however, because the value stored
inside an interface has no address.

Go的面向对象总结

在Go里面是没有类的概念的,类型和方法是松耦合的,通过接口让他们链接在一起。

OO里面三个重要的概念:封装,继承和多态,在Go里面是这样对应的

封装(数据隐藏):其他的OO语言有4个访问级别,在Go里面只有2种

1. 包级:对象在整个包的范围内可见,以小写字母开头

2. 被导出:对象在包外可见,以大写字母开头

一个类型可以只有方法定义在它的包里。

继承:通过内嵌的一个或多个类型来达到多继承的目的

多态:接口,一个类型变量可以被分配给它的任意接口实现的实例。类型和接口是松耦合的, 多继承可以通过实现多个接口来完成。Go的接口不是Java或C#接口的变体, 它们更加的独立并且是大规模编程,鲁棒性和演变设计的关键

时间: 2024-10-12 03:56:56

Fourth glance in Go的相关文章

Ubuntu16.10安装Ocata之3:Glance

1.创建Glance数据库 [email protected]:~/ocata# mysql -uroot -p -e "CREATE DATABASE glance" Enter password: [email protected]:~/ocata# mysql -uroot -p -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'zoomtech'" Ente

58 Openstack基础、openstack之glance、openstack之keystone

03 openstack之keystone 配置环境 Controller CentOS release 6.7 controller eth0:仅主机 192.168.28.121 eth1:桥接 192.168.1.121 node2 192.168.1.122 CentOS release 6.7 compute1 eth0:仅主机,eth1:VMnet2 不会直接与外部网络通信 node3 192.168.1.123 CentOS release 6.7 networking eth0:

【N版】openstack——镜像服务glance(四)

[N版]openstack--镜像服务glance 一.openstack之glance镜像服务 1.1glance介绍 glance主要是由三部分组成 glance-api:接收云系统镜像的创建,删除,读取请求,类似nova-api,通过其他模块(glance-registry及image store)来完成诸如镜像的查找.获取.上传.删除等操作,api监听端口9292. glance-registry:云系统的镜像注册服务,用于与mysql数据库交互,存储或获取镜像的元数据(metadata

glance image cache

The Glance Image Cache The Glance API server may be configured to have an optional local image cache. A local image cache stores a copy of image files, essentially enabling multiple API servers to serve the same image file, resulting in an increase i

Glance支持镜像的格式

Glance支持多种镜像的格式, 下面列出了目前已经支持的镜像格式: raw – 非结构化的镜像格式 vhd – 一种通用的虚拟机磁盘格式, 可用于Vmware.Xen.Microsoft Virtual PC/Virtual Server/Hyper-V.VirtualBox等. vmdk – Vmware的虚拟机磁盘格式, 同样也支持多种Hypervisor vdi – VirtualBox.QEMU等支持的虚拟机磁盘格式 iso – 光盘存档格式 qcow2 – 一种支持QEMU并且可以动

glance总结

Openstack将glance独立出来的一个原因是尽可能将镜像存储至多种存储上,由glance提供一个完整的适配框架.现在支持亚马逊对象存储S3.openstack自有的swift对象存储,以及常用的文件系统存储. 流程图如下: glance api :对外提供镜像接口服务. registry server : 注册服务,存储镜像元数据信息与数据库交互实现镜像基础信息存储. store adaptor : 存储镜像文件,提供多种存储适配. 在实际部署上,glance api与glance re

Openstack针对nova,cinder,glance使用ceph的虚拟机创建机制优化

 今天在开源中国社区看到有如下一个问题: 已经成功把ceph作为cinder和 glance的后端,但是如果作为nova的后端,虚拟机启动速度非常慢,网上查了一下是因为openstack创建虚拟机的时候通过ceph取镜像创建虚拟机再把虚拟机存回ceph的步骤浪费了很多时间,是否有办法不把镜像取到本地,而是直接在ceph的存储池里完成虚拟机的创建呢? 实际上,我当前也是把ceph作为nova,cinder,glance三者的后端,创建虚拟机速度非常慢.查了一下相关和资料,是有新的处理方式,当前

OpenStack 镜像服务 Glance部署(六)

Glance介绍 创建虚拟机我们需要有glance的支持,因为glance是提供镜像服务. Glance有两个比较重要的服务: Glance-api:接受云系统镜像的构建.删除.读取请求 Glance-Registry:云系统的镜像注册服务 我们需要配置glance-api的配置文件和glance-registry配置文件 .glance不需要配置消息队列,但是glance需要配置keystone(认证中心). 提示:默认情况下上传镜像存放在/var/lib/glance/images下 Gla

中小企业openstack私有云布署实践【9.1 Glance镜像管理(科兴环境)】

首先登录kxcontroller1创建kx_glance数据库,并赋于远程和本地访问的权限. mysql -u root -p CREATE DATABASE kx_glance; GRANT ALL PRIVILEGES ON kx_glance.* TO 'glance'@'localhost'  IDENTIFIED BY 'venic8888'; GRANT ALL PRIVILEGES ON kx_glance.* TO 'glance'@'%'  IDENTIFIED BY 'ven