golang ----------- 基础知识点汇总

1、类型:

任何类型在未被初始化时都对应一个零值,布尔类型是false, 整型是0,字符串是“”,而指针,函数,interface,slice,map,channel的零值是nil

基本类型:基本类型的名称都必须预定义标识符。除了 bool 与 string 外,其它的都称为数值类型。

  • 整数类型: int、unit(不带负号)、int8(8位)等等,int/unit长度是根据CPU 变化的,计算机是64位就是8字节
  • 浮点类型:float32、float64,相当于C语言中的float32和double.
  • 布尔类型:bool
  • 复数类型: complex64、complex128
  • 字符串类型: string(string(65)为A,strconc.Itoa(65)为“65”)
  • 字符类型: byte、rune

八个复合类型:

  • Array(数组)、Struct(结构体)、Function(函数)、Interface(接口)、Slice(切片)、Map(字典)、Channel(通道)以及Pointer(指针)

引用类型

  • 切片slice、字典map、管道channel

2、int与string转换规则:

string转成int: 

int, err := strconv.Atoi(string)

string转成int64: 

int64, err := strconv.ParseInt(string, 10, 64)

int转成string: 

string := strconv.Itoa(int)

int64转成string: 

string := strconv.FormatInt(int64,10)

3、浮点类型比较

浮点数的比较需要注意的是精度问题,像整型直接用==判断俩浮点数是否相等是不可行的, 会产生不稳定的结果,所以实现一个浮点数的比较函数用来判等是可行的。

import "math"
func IsEqual(f1, f2, p float64) bool {
    // p为用户自定义的比较精度,小于比较精度就可认为相等
    return math.Fdim(f1, f2) < p   
}

golang中的编译器不会做隐式的类型转换,int和int32是俩种不同的类型,float32和float64是不同的类型,同时要注意数据长度被截短发生的数据精度损失(如浮点数强制转换为整数)和值溢出(值超过转换的目标类型的值范围)问题。

4、标识符

可以被看作是变量或者类型的代号或者名称

5、关键字

是指被编程语言保留页不让编程人员作为标识符使用的字符序列

6、字面量

字面量可以指这个量本身,字面量就是表示值的一种标记法。

用于表示基础数据类型值的各种字面量。

用户构造各种自定义的复合数据类型的类型字面量,如下面这个字面量表示了一个名称为 Person 的自定义结构体类型:

type Person struct {

     Name string

     Age uint8

}

用于表示复合数据类型的值的复合字面量,更确切地讲,它会被用来构造类型 Struct(结构体)、Array(数组)、Slice(切片)和Map(字典)的值。如下面的字面量可以表示上面的那个 Person 结构体类型的值:

Person(Name: "Eric Pan", Age: 28}


7、常量

 只有数值类型和字符串类型才可以作为常量

用变量赋值给常量是不允许的

常量可以不声明类型(untyped), 它会根据常量值设置默认的类型

常量的类型转换检查是编译时行为

8、变量

快速变量声明:就是用:=操作符,它会声明并初始化一个变量,可以自动推导类型。不过这种声明有一个限制,它只能在函数内部使用,在函数外部会报错

9、静态类型和动态类型

静态类型(static type)是变量声明的时候的声明类型,在变量声明、new方法创建对象时或者结构体(struct)的元素的类型定义,参数类型等。

接口(interface)类型的变量还有一个动态类型,它是运行时赋值给这个变量的具体的值的类型(当然值为nil的时候没有动态类型)。一个变量的动态类型在运行时可能改变,这主要依赖它的赋值。

你可能感兴趣的:(golang ----------- 基础知识点汇总)