golang基础学习

golang基础类型

  • bool:(true,false)
  • int:32位或者64位整型
  • int8,int16,int32,int64:8位、16位、32位、64位整型
  • uint8,uint16,uint32,uint64:无符号8、16、32、64位整型
  • byte:等价于uint8
  • rune:等价于int32
  • float32,float64:浮点32、64位
  • complex32,complex64:复数32位、64位
    除非非常明确符号及位数,否则通常的整型最好都使用int

默认值

各个类型都有默认值,基础类型的默认值通常为0或者false,
map、slice等的默认值为nil,因此nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果
用int于nil进行比较,会造成panic

string字符串

raw字符串:使用``括起来的字符串将按照字面意思解释,不会进行转义

UTF-8编码:

go源文件都以utf-8作为默认编码
utf-8

内存分配

  • new
    go中使用new分配内存,返回一个指针。例如:new(T) 分配了零值填充的T类型的内存空间,并且返回其地址,一个 *T 类型的值

  • make
    内建函数 make(T, args) 与 new(T) 有着不同的功能。它只能创建 slice,map 和 channel,并且返回一个有初始值(非零)的 T 类型,而不是 *T。本质原因是数据结构的引用在使用前必须初始化。因此make函数封装了对引用对象的初始化。而new并不会进行初始化,只会分配对象内存(零值)并返回一个指向该内存的指针。

举例make和new的区别:
对于一个slice,其初始化值应该包括三个部分:一个底层数组array,一个长度length以及容量capacity。而零值则是直接都复制为0。make会分配内存并进行初始化,返回引用,new分配内存并分配零值返回指针。

总结:

上面的两段可以简单总结为:
• new(T)返回*T指向一个零值T
• make(T)返回初始化后的T
当然 make 仅适用于 slice,map 和 channel。

duck typing

只要一个对象实现了一个接口所包含的所有方法,那么就可以将其看做该接口类型,无须显示声明。维基百科上的形象解释:

When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.

只引入包的全局变量和init函数:
import _ "path/to/package"