Go基础语法(短句精简版)(上)
上篇分为2部分:
- 结构体、函数、程序流程控制、结构体标签
- 包、变量、常量、指针、数据结构、反射
结构体、函数defer、程序流程控制
1 OOP:Go不是面向对象语言,但是具有OOP的特性,体现了很大的灵活性。
1. 封装:结构体(属性)+ 构造器(New开头,返回一个对象地址)+ 方法(绑定结构体)
- 注意指针:*是声明类型,&是取地址,都表示指针地址(记住&表示对象即可)
- 注意命名:结构体的类、属性、方法的命名,决定访问权限,一般都大写。
- go的结构体本质上是创建指针。因此外部创建对象返回的是对象地址(&r),而内部属性的使用要用this这个对象去调用,在方法传参时要传递对象地址(&r)。
- 构造方法: NewAccount() *Account,New开头,返回一个对象地址。
2. 继承:组合
- 声明:属性加上父类即可,可以重写、独创。
- 创建:嵌套父类的形参列表。
3. 多态:接口
- 声明:实现接口的所有方法就行。
- 创建:要加&子类!
2 函数、defer
1. 写法:
- 定义函数时,先考虑传参和给返回值,不要漏了() !
- go的函数定义是返回值放在形参列表后面,而且是多形参、多返回值。
- 形参列表就相当于定义了变量,因此在函数体内要用赋值符号(=)。
2. defer是结束程序的最后一步,通常用于关闭Close(),后于return。
3 程序流程控制
- 循环全部用for。for{}是死循环。
- break用于退出循环,return用于退出程序,continue用于重新开始下一轮(一般是好几轮)
- switch的case不用break。
4 结构体标签(一般不会手动编码解码,自动),用于其他包调用时能看到属性的说明(避免二义性)。
func findTag(str interface{}) {// 1. 获取全部元素的类型:TypeOf获取类型,Elem()全部元素t := reflect.TypeOf(str).Elem() // 2. 遍历全部字段数量次for i := 0; i < t.NumField(); i++ { // 3. 获取字段:第i行,Tag获取标签,Get获取标签内的字段(key: "info","doc")taginfo := t.Field(i).Tag.Get("info") tagdoc := t.Field(i).Tag.Get("doc")// 4. 打印字段fmt.Println("info: ", taginfo, ", doc: ", tagdoc)}
}
接收与输出
接收要先声明再传入地址,格式化输出用占位符,格式化返回用变量接/匿名。
1. 接收scanln:一定要先声明,再接收地址。
var choose int // 声明
fmt.Scanln(&choose) // 传入scanln地址 fmt.Scanf("%s\n%s",&a,&b) // 格式化
2. 普通输出:println
1. 格式化输出:printf(format, ...)
2. 占位符:%T数据类型, %s字符串, %d整数, %v数据的值, %t布尔值
3. 字符串连接: ,(不能用+)
3. 格式化返回(不输出):sprintf,一般用一个变量接收。
包、变量、常量、指针、数据结构、反射
0 包可以匿名、别名、用 . 直接导入本包(不建议可能造成方法重载)。
1 变量:go的数据类型声明在变量名后面,有三种声明语法。
go的数据类型:int,string,float32,float64,struct。
原则:go的所有包、变量声明了就必须使用,否则报错。可以用_匿名代表。
- 具体赋值:{...}
- 只声明:var A
- 省略var和数据类型: :=
- 声明多个变量,类型一样可合并。
2 常量:const可以用于枚举,iota用于累加计算,第一行默认iota=0。
3 指针:值传递和引用传递
go默认是值传递(包括struct)。如果要改变原值就要加上*。(比如结构体的属性,是需要被用户修改的,因此就需要传入地址 (this *Hero))
slice、map、channel天生是引用传递。
这些数据结构要注意空指针现象,不能只声明,不然没有分配空间,否则为nil。
如果要独立,不想改变原值,就make一个新的来调用。
4 数据结构:array、slice、map、channel、interface{}
1. 定义:
- 数组类型是[10]int,切片类型是[]int。
- 数组类型包含了长度,因此在方法传参上有限制。( [10]int )
2. slice、map、channel天生就是指针。因此如果只声明不赋值的话,就是空指针,没有被分配空间。(判断slice是否为空:if slice == nil)
3. 声明:
- 具体赋值:{...}
- 只声明(接收用户输入时经常用到):var
- 只分配空间(初始化属性时经常用到):make([]int, 3)
4. 操作:
- for的两种常用遍历方式:索引遍历(for),元素遍历(for key/index, value := range nums)
- slice切片长度,容量
- 直接赋值
- append是追加,在ptr后一位添加。
- 满了会动态扩容。
- slice切片截取:默认指向同一对象(本质是指针)。要独立就要make新的。
- map添加/修改:直接赋值(索引是key)。
- map删除:delete(索引是key)。
5. Go的泛型就是一个万能接口interface{}。
- 方法传参:万能类型变量arg,类型为空接口interface{}。
- 类型断言:value, ok := arg.(string)(注意:arg.要加点!)
5 反射
1. 每个变量有一对pair,pair会连续传递。(反射:变量 --> pair)
- type(二选一:静态类型static。具体类型concrete(interface具体指向的类型))
- value。
2. reflect包可用于获取类型和值,TypeOf(), ValueOf()。
下一集讲:并发编程(goroutine、channel)
Go基础语法(短句精简版)(上)相关推荐
- java基础语法(精简版)
文章目录 目录 文章目录 一.运算符 1.算数运算符 2.赋值运算符 3.关系运算符(比较运算符) 4.逻辑运算符 5.三元运算符 6.字符的"+"操作 7.字符串的+操作 二.流 ...
- Markdown语法学习|精简版
markdown语法学习|精简版 文章开头 点击这里回到下方介绍 页面跳转 的阅读位置 点击这里回到下方介绍 toc 的阅读位置 此笔记学习摘抄自Markdown语法大全(超级版),并根据笔者的使用不 ...
- Scala的基础语法(超详细版)
Scala的基础语法 文章目录 Scala的基础语法 1.声明值和变量 2.数据类型 3.算术和操作符重载 4.控制结构语句 4.1条件分支语句 4.2循环语句 5.方法与函数 5.1方法 5.2 函 ...
- MySQL基础语法(详细版)
文章目录 1.数据库的介绍 1.1 数据库概念 1.1.1 数据的存储方式 1.1.2 什么是数据库 2.数据库的安装与卸载 2.1数据库的安装 2.2数据库的卸载 3.数据库服务的启动与登录 3.1 ...
- linux的上传工具,Linux下精简版上传工具lrzsz
lrzsz是一款在linux里可代替ftp上传和下载的程序. 1.配置好yum仓库. [root@tiejiang ~]# yum -y install lrzsz Loaded plugins: f ...
- Swift之语法1(精简版)
1. Swift简介 2010年的夏天,苹果公司的开发人员Chris Lattne接到了一个特别的任务,为OS X 和iOS平台开发下一代的编程语言,也就是Swift. 苹果公司于2014年WWDC( ...
- 【原】iOS学习之Swift之语法1(精简版)
1. Swift简介 2010年的夏天,苹果公司的开发人员Chris Lattne接到了一个特别的任务,为OS X 和iOS平台开发下一代的编程语言,也就是Swift. 苹果公司于2014年WWDC( ...
- PHP基础题带详细答案,PHP基础语法试题(一)答案版.docx
PHP基础语法试题(一)答案版 关于服务器.浏览器.PHP解释器的说法中,正确的有( ).A. Web浏览器只解析HTML.CSS.JavaScript代码B. PHP文件,只能被Apache服务器解 ...
- [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)
[异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7) 参考文章: (1)[异常解决] ubuntu上安装虚 ...
最新文章
- 内存技术:入门和测试挑战
- 解决 Android java.lang.RuntimeException: Stub!
- python android自动化基于java_Appium+Python自动化 1 环境搭建(适用windows系统-Android移动端自动化)...
- [!] Attempt to read non existent folder `***********`
- 电机与拖动单相变压器实验,江南大学物联网工程学院,实验报告
- python进程数据共享_python程序中的进程操作-进程间的数据共享
- MySQL表联合查询 理论基础:外键、操作关联表(一)
- java 多态,接口,抽象类的认识
- 支付宝相关信息会被泄露出去吗?
- pap认证要交换几次报文_华为HCIA认证RS路由与交换 —— 链路状态协议OSPF PPP原理与配置方法详解...
- linux 7安装mysql8.12_Linux(centOS 7)安装MySQL8.12
- 如何判断一个类是无用的类?
- android手机怎么root,安卓手机如何Root 安卓手机Root权限获取图为教程
- 基于UDP的网络群聊系统
- JAVA300集速学堂高淇个人笔记P1-P7如何学习JAVA300集计算机语言的发展历史多种编程语言的介绍JAVA三大版本的含义:
- cmos逻辑门传输延迟时间_Verilog设计与逻辑综合实例解析(低功耗)
- 正斜杠“/“和反斜杠“\“的区别
- Excel如何提取文本左边的数字
- B1029/A1084 旧键盘——测试点4
- 【STM32】TCL2543CN 12位11通道ADC芯片stm驱动程序,使用32自带SPI实现