Golang 学习记录 (一)

Gascognya · · 338 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

声明变量

var声明

var name typevar name type = value

以及批量定义
var name1, name2 = value1, value2

var (
    a int
    b string
    c []float32
    d func() bool
    e struct {
        x int
    }
)

:=海象符

name := value 相比更简单,但需要注意以下问题

  • 必须赋值
  • 必须是新变量
  • 不能提供数据类型
  • 只能用在函数内部

name, age := value1, value2 等号的左边必须含有至少一个新变量才可以。可以有已存在的变量。

编译器推导类型

var num = 100 如这种格式,100显然是int类型,这是编译器会根据这点自动推导出num的类型,标注var num int = 100 是没有必要的。

_ 匿名变量

当有多个返回值,但其中有一些不想接收时,可以用匿名变量来解决。
return 1, 2, 3, 4a, _, c, d = function()
这样我们只会接收到1, 3, 4三个值,而2将会被抛弃,且不占内存。

数据类型

整数类型

两种整数类型 intuint,它们分别对应特定 CPU 平台的字长(机器字大小)
他们衍生出int8, int16, int32, int64, uint64, uint32, uint16, uint8等类型。
用来表示 Unicode 字符的 rune 类型和 int32 类型是等价的,通常用于表示一个 Unicode 码点。这两个名称可以互换使用。同样,byteuint8 也是等价类型,byte 类型一般用于强调数值是一个原始的数据而不是一个小的整数。

哪些情况下使用 int 和 uint

程序逻辑对整型范围没有特殊需求。例如,对象的长度使用内建 len() 函数返回,这个长度可以根据不同平台的字节长度进行变化。实际使用中,切片或 map 的元素数量等都可以用 int 来表示。
反之,在二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用 int 和 uint。

小数类型

一个 float32 类型的浮点数可以提供大约 6 个十进制数的精度,而 float64 则可以提供约 15 个十进制数的精度,通常应该优先使用 float64 类型,因为 float32 类型的累计计算误差很容易扩散,并且 float32 能精确表示的正整数并不是很大。
const e = .71828const f = 1.两种情况,小数点前或后可以自动省略

布尔类型

true & false

  1. 只有两个相同类型的值才可以进行比较,如果值的类型是接口,那么它们也必须都实现了相同的接口。如果其中一个值是常量,那么另外一个值可以不是常量,但是类型必须和该常量类型相同。如果以上条件都不满足,则必须将其中一个值的类型转换为和另外一个值的类型相同之后才可以进行比较。

  2. 布尔值可以和 &&(AND)和 ||(OR)操作符结合,并且有短路行为,如果运算符左边的值已经可以确定整个布尔表达式的值,那么运算符右边的值将不再被求值.

  3. &&的优先级比||高(&& 对应逻辑乘法,|| 对应逻辑加法,乘法比加法优先级要高)

  4. 布尔值并不会隐式转换为数字值 0 或 1


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Gascognya

查看原文:Golang 学习记录 (一)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

338 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传