go语言基础

147 阅读4分钟

这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

bool类型

布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true

数值型

  1. 整数型

可以简单讲解一下二进制和位数的关系,以及int和uint的关系

  • int8 有符号 8 位整型 (-128 到 127) 长度:8bit
  • int16 有符号 16 位整型 (-32768 到 32767)
  • int32 有符号 32 位整型 (-2147483648 到 2147483647)
  • int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
  • uint8 无符号 8 位整型 (0 到 255) 8位都用于表示数值:
  • uint16 无符号 16 位整型 (0 到 65535)
  • uint32 无符号 32 位整型 (0 到 4294967295)
  • uint64 无符号 64 位整型 (0 到 18446744073709551615)

有符号数会拿出第一位表示正/负数,上限会变小

  1. 浮点型
  • float32 32位浮点型数
  • float64 64位浮点型数

其他

  • byte 等于 uint8
  • rune 等于 int32
  • uint 32 或 64 位

据类型转换

strconv Itoa和Atoi

Parse类函数 Parse类函数用于转换字符串为给定类型的值

Format类函数 将给定类型格式化为string类型

错误和异常

错误和异常 错误就是可以预先知道的出错的可能,这个时候我们把这情况叫做错误, 不可预知的问题叫做异常 程序员写的代码不严谨造成的某个地方在某种情况下产生了异常

比如Django的get方法,我们必须通过文档来看到底是返回空list,还是异常

异常 go语言中如何抛出异常和如何捕捉异常 go语言认为错误就要自己处理, 就个人而言,go语言的这种想法是正确的。但是实际的使用中确实人有点烦人

面向对象

go语言不支持面向对象

对Python而言,如果只关心数据,用tuple更合适,tuple更省内存 性能更高 namedtuple很像是一个只能封装数据的类 但是namedtuple的性能比class高, 内存会比class小很多

go语言的struct更像是namedtuple, 尽量配置简单的语法尽量猜测你的意图

python里面,类属性加_代表变量是内部使用

大小写在go语言中的重要性 可见性 一个包中的变量或者结构体如果首字母是小写 那么对于另一个包不可见 机构体定义的 名称 以及属性首字母大写很重要

接口

go语言的接口(protol 协议)设计是参考了鸭子类型(python)和java的接口 什么是鸭子类型? 什么叫协议 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子 采用的是面向对象的类继承

dog是不是动物类 实际上dog就是动物类 忽略了鸭子类型, 对于用惯面向对象的人来说呢 这个做法有点奇怪 python语言本身的设计上来讲是基于鸭子类型实现的 Animal实际上只是定义了一些方法的名称而已 其他的任何类只要实现了这个Animal里面的方法那你类就是Animal类型

for语句 可以对dict, list tuple set等等类型进行for循环 for语句可以对iterable类型进行操作 只要你实现了__iter__那你就可以进行for循环 你的类继承了什么不重要 你的类名称不重要 重要的是你实现了什么魔法方法

python本身是基于鸭子类型设计的一门语言 - 协议最重要 python靠的是方法名,协议,比如django的中间件 强调 什么是鸭子类型 非常推荐大家去好好的学习python中的魔法方法

通过Python的鸭子类型去学习go的接口

包管理和编码规范

包管理,异常处理,泛型被诟病很多

能用go modules就用modules,不用去考虑以前的开发模式 即使你使用了以前的模式,也可以自动设置为现在的modules模式

go modules是一个统一的做法

同一个包下面的文件,package要定成一样的

// 1. 新建项目的时候选择go modules // 2. 新建一个包的时候,新建一个文件夹一般小写 这个文件夹下面的所有源码中的package都一样 // 3. import "PackageTest/calc" 实际上很多人会认为包名,实际上是包的路径 // 4. 同一个文件夹下面的package名称可以不和文件夹名称保持一致,但是这些源码中的package