人生苦短,Let's GO

今天我学了什么?

1. 结构体(struct)

/*

type TYPENAME struct {

name type

...

}

*/

type person struct {
name, city string //这里上下类型的位置最好对上,可以使用go fmt完成代码格式化
age int8
}
//1.定义
var p1 person
p1.name = ""
...
//2.定义并赋值
p2 := person{
name: " " //name:可以略去,此时必须初始化所有字段且与定义顺序一致
city: ""
age:20
}
//3.
var p3 = new(person) //p3:=&person{}
(*p3).name = ""
p3.city="" //可以直接调用指针结构体中的字段

匿名类

var user struct {
name string
age int
}
user.name = "Joko"
user.age = 80
fmt.Printf("p1:%#v\n", user)

2、方法(Method)和 接收者

方法就是类内函数,也不知道go是怎么神奇的将零散的方法整合成一个大结构

接收者是一个我没听说过的概念,学习之后感觉作用类似与this指针

//构造函数,习惯上命名为NewStructName
func NewPerson(name string,age int) *Person {
return &Person{
name:name,
age:age,
}
}
//(p Person)就是接收者啦,惯例取类第一个字母小写为名,这里是值接收者
func (p Person) Dream() {
fmt.Printf("%s is dreaming\n",p.name)
} //指针接收者在修改内部数据上更有优势(自己声明的this)
func (p *Person) SetAge(age int) {
p.age = age
}

3. 组合与继承

Go的官方回应Go是否为面对对象语言时表示yes and no,

yes :Go 具备很多面对对象的特性

no:但Go又不像C++或Java那么强硬的封装

type Address struct {
city string
} type Person2 struct {
name string
age int
Address //Address类以匿名类形式进行组合
} p2 := Person2{
name: "JOKO",
age: 10,
Address: Address{"hk"},
}
fmt.Printf("%#v\n",p2)
fmt.Println(p2.city) //直接访问匿名结构体字段,前提是不存在字段冲突
//如果不使用匿名类调用方式:p2.Address.city
type Animal struct {
name string
} func (a *Animal) move() {
fmt.Printf("%s move",a.name)
} type Dog struct {
feet int
*Animal
} func (d *Dog) wang() {
fmt.Printf("%s www",d.name)
} d.wang()
d.move()

继承与多态,但是没有任何明确的说继承这个字眼

4.接口(interface)

接口其他都不管,就认方法,实现方法就是实现了接口。

type sayer interface {
say()
}
func (p Person) say() {
fmt.Println("Hi")
}
//实现接口
func sayHi(arg sayer) {
arg.say()
}
type Sayer interface {
say()
} //实现多个接口
type Runer interface {
run()
} //接口嵌套
type animal interface {
Sayer
Runer
}

空接口 interface{}

神奇的一个东西:任何类型都实现空接口,所以空接口可以存储任意类型值

这是Go的泛型?

type xxx interface {
}
var x interface{}  //直接声明空接口变量x
x = "Hello" //x 可以实现任意变量
fmt.Println(x)
x = 123
fmt.Println(x)
x = false
fmt.Println(x) var m = make(map[string]interface{},16)
m["name"] = "Pallava"
m["age"] = 18
m["hobby"] = []string{"sing","jump","rap"}
fmt.Println(m)
//断言:判断空接口存的值的类型
ret,ok:= x.(bool)
if !ok {
fmt.Println("not bool")
} else {
fmt.Println("is bool",ret)
}

总结:

很明显,Go的语言出乎意料的精炼高效,像开发python一样愉快的开发C++般功能的项目。

希望Go越来越强大(后浪!)

那么朋友,人生苦短,Let's GO!

Let's GO(三)的更多相关文章

  1. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  2. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  3. Jquery的点击事件,三句代码完成全选事件

    先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  4. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  5. 简谈百度坐标反转至WGS84的三种思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...

  6. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  7. 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  8. 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域

    一.前言 结合我们本次系列的第一篇博文中提到的上下文映射图(传送门:如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念),得知我们这个电商网站的核心域就是销售子域.因为电子商务是以信息网络 ...

  9. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  10. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

随机推荐

  1. Python--循环--for && while

    for循环示例:猜数字游戏 winning_number = 38 for i in range(3): guess_num = int(input("guess num:") ) ...

  2. [51nod 1847]奇怪的数学题

    [ 51nod 1847 ]奇怪的数学题 题目   点这里看题目. 分析   是挺奇怪的......   以下定义质数集合为\(P\),\(p_i\)为第\(i\)个质数.   定义\(mp(x)\) ...

  3. 在CentOS下利用Docker一键安装seafile

    https://cloud.seafile.com/published/seafile-manual-cn/docker/pro-edition/%E7%94%A8Docker%E9%83%A8%E7 ...

  4. maven项目快速搭建SSM框架(一)创建maven项目,SSM框架整合,Spring+Springmvc+Mybatis

    首先了解服务器开发的三层架构,分配相应的任务,这样就能明确目标,根据相应的需求去编写相应的操作. 服务器开发,大致分为三层,分别是: 表现层 业务层 持久层 我们用到的框架分别是Spring+Spri ...

  5. 几款一元单片机对比:CMS8S5880、STM8S003、N76E003

    大概17年开始,STM8S003的价格被贸易商炒货,变得很不稳定,一度上涨到2~3元,因为市场需求大增,小家电.无线充和一些简单功能的产品,本人就有在空气净化器.433M触摸开关.数据收发模块.红外控 ...

  6. selenium(3)-针对鼠标的操作

    背景 用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等. 而selenium给我们提供了一个类来处理这类事件-----------Acti ...

  7. weui上传多图片,前端压缩,base64编码

    记录一下在做一个报修功能的心路历程,需求功能很简单,一个表单提交,表单包含简单的文字字段以及图片 因为使用的是weui框架,前面的话去找weui的表单和图片上传组件,说实话,weui的组件写的还不错, ...

  8. Linux上的Systemctl命令

    LinuxSystemctl是一个系统管理守护进程.工具和库的集合,用于取代System V.service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器.通过Syste ...

  9. Refresh Java

    当你的知识来源于实践, 你可能会忽略很多细节. 当你的知识来源于阅读, 你可能会很快的忘掉. 那么, 不如在空闲之余, 浏览一遍, 把觉得有必要的记录下来, 也便于以后温故而知新, 何乐而不为呢? 于 ...

  10. 阿里巴巴开源canal 工具数据同步异常CanalParseException:parse row data failed,column size is not match for table......

    一.异常现象截图  二.解决方式: 1.背景 早期的canal版本(<=1.0.24),在处理表结构的DDL变更时采用了一种简单的策略,在内存里维护了一个当前数据库内表结构的镜像(通过desc ...