golang学习笔记(一)

253 阅读3分钟

变量/常量

  • 基本类型:数字类型、bool、string
  • 结构化类型:struct、array、slice、map、channel
  • 只描述类型的行为:interface
  • 变量声明方式
    var a string
    var b = 1
    c := false
    var (
    d = 10
    e string
    )
    
  • const 用来定义常量,且仅限布尔型、数字型(整数型、浮点型和复数)和字符串型
    • 常量的值必须是能够在编译时就能够确定的
    • 编译期间自定义函数均属于未知,因此无法用于常量的赋值,但内置函数可以使用
    • 常量的值无法被改变,如果编译时发现代码中试图修改常量的值则会引发编译错误
  • iota 可以被用作枚举值,简单地讲,每遇到一次 const 关键字,iota 就重置为 0
  • var 声明变量时,变量类型在名称之后
  • 当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil
  • 如果你的全局变量希望能够被外部包所使用,则需要将首个单词的首字母也大写
  • golang变量的作用域简单点可以分为:
    • 全局变量,在整个包甚至外部包(被导入后)都可使用
    • 局部变量,在函数内定义的变量,包括参数和返回值
    • 代码块内,if,for等一些{}分割的代码块内声明的变量
  • 在 golang 中也可进行如 python 相同的变量置换操作,但是两个变量的类型必须相同
    a := "这是a"
    b := "这是b"
    a, b = b, a
    

数字类型

与操作系统架构无关的类型都有固定的大小,并在类型的名称中就可以看出来 整数:

  • int8(-128 -> 127)
  • int16(-32768 -> 32767)
  • int32(-2,147,483,648 -> 2,147,483,647)
  • int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)

无符号整数:

  • uint8(0 -> 255)
  • uint16(0 -> 65,535)
  • uint32(0 -> 4,294,967,295)
  • uint64(0 -> 18,446,744,073,709,551,615)

浮点型(IEEE-754 标准):

  • float32(+- 1e-45 -> +- 3.4 * 1e38)
  • float64(+- 5 * 1e-324 -> 107 * 1e308)

复数

  • complex64 (32 位实数和虚数)
  • complex128 (64 位实数和虚数)

init 函数

  • 不能够被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比 main 函数高
  • 每个源文件都只能包含一个 init 函数。初始化总是以单线程执行,并且按照包的依赖关系顺序执行
  • 可用在开始执行程序之前对数据进行检验或修复,以保证程序状态的正确性

运算符

优先级

优先级 	运算符
 7 		^ !
 6 		* / % << >> & &^
 5 		+ - | ^
 4 		== != < <= >= >
 3 		<-
 2 		&&
 1 		||