Go语言基础
Go的数据类型
基本数据类型
- 布尔型bool
- 字符型string
- 整型int int8 int16 int32 int64
- unit unit8 unit16 uint32 unit64 uintptr
- 字节型byte
- rune
- float32 float64
- complex64 complex128
与其他语言的差异
- Go不支持隐式类型转换
- 别名和原有类型也不能进行隐式类型转换
示例
错误の示例1
错误の示例2
类型的预定义值
在math包下,有int、float、unit,直接使用即可
指针类型
支持使用指针直接访问内存空间
与其他语言的差异
- 不支持指针运算
- string是值类型,默认的初始化值是空字符串,不是nil
示例
使用示例
func main() {
a:=1
aPtr:=&a
fmt.Println(a,aPtr)
//%T获取变量类型
fmt.Printf("%T %T",a,aPtr )
}
######################################
1 0xc000128058
int *int
Process finished with the exit code 0
差异の示例1
差异の示例2
func main() {
var s string
fmt.Println("*"+s+"*")
fmt.Println(len(s))
}
######################################
**
0
数组和切片
Map
与其他语言的差异
- 获取不存在的key不会报空指针(参考java),会根据value的类型返回默认值,比如int是0,string是 nil。此时不能简单的通过nil判断key是否存在,但是可以主动判断key是否存在
- map的value可以是一个方法
- 与go的dock type接口方式一起,可以实现单一方法对象的工厂模式
示例
map的声明
//map[key type]value type
map1:=map[string]int{
"one":1,"two":2}
map2:=map[string]int{
}
map1["one"]=11
//make(type,capacity),map跟切片都是自增长度的存储,如果容量不够,就会分配新的内存空间然后把原来的值进行拷贝。如果我们提前就知道了map的容量,那么就可以使用map初始化,避免因为频繁扩容带来的开销,提高性能
map3<