• Go基础语法篇


    变量、内建变量类型、常量与枚举、条件语句、循环、函数、指针

    语法

    变量

    组成:以字母或下划线开头,由一个或多个字母、数字、下划线

    使用:先定义在使用;声明后必须使用否则会编译错误,若想忽略参见空白字符_用法

    作用域

    变量可以在三个地方声明:局部变量(函数内定义)、全局变量(函数外定义)、形式参数(函数定义中)

    局部变量:作用域在函数体内,参数和返回值变量也是局部变量

    全局变量:首字母大写全局变量可在包甚至外部包(被导出后)使用

    形式参数:会作为函数的局部变量来使用

    声明方式:var

    第一种,指定变量类型,声明后若不赋值,使用默认值         

    第二种,根据值自行判定变量类型(类型推断Type inference  

    第三种,使用:=定义变量 只能在函数内使用,否则会报错

    多变量声明

    第一种,以逗号分隔,声明与赋值分开,若不赋值,存在默认值
    第二种,直接赋值,下面的变量类型可以是不同的类型
    第三种,集合类型可放在函数内,或直接放在包内;使用var()集中定义变量
    注:相同代码块不可对同名变量使用:=进行初始化声明(已经存在),可对其重新赋值
    注:变量必须定义之后使用,定义了必须使用

    _空白标识符

    只写变量,不能得到其值。
    用途:
    1)声明后不想使用所有,比如不需要从一个函数得到所有值
    2)并行赋值

    常量

    数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型

    注:不曾使用的常量,在编译的时候,是不会报错的

    const identifier [type] = value
    显式类型定义: const b string = "abc"
    隐式类型定义: const b = "abc"

    特点

    常量定义枚举类型,Go无枚举关键字
    Const数值可作为各种类型使用
    使用iota表示自增值
    Go语言大小写有含义,常量不需要全部大写
    常量组中如不指定类型和初始化值,则与上一行非空常量右值相同

    iota

    特殊常量,可以认为是一个可以被编译器修改的常量
    在每一个const关键字出现时,被重置为0,然后再下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1
    iota 可以被用作枚举值
    注意:
    如果中断iota自增,则必须显式恢复。且后续自增值按行序递增
    自增默认是int类型,可以自行进行显示指定类型
    数字常量不会分配存储空间,无须像变量那样通过内存寻址来取值,因此无法获取地址

    例子:

    内建变量类型

    bool

    布尔型的值只可以是常量 true 或者 false

    Numeric Types

    int8,int16,int32,int64,int   (注:int根据系统32还是64决定)

    int8 有符号 8 位整型 (-128 到 127)
    int16 有符号 16 位整型 (-32768 到 32767)
    int32 有符号 32 位整型 (-2147483648 到 2147483647)
    int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

    uint8,uint16,uint32,unint64,unit

    uint8 无符号 8 位整型 (0 到 255)
    uint16 无符号 16 位整型 (0 到 65535)
    uint32 无符号 32 位整型 (0 到 4294967295)
    uint64 无符号 64 位整型 (0 到 18446744073709551615)
    int 与 unit 都是 32位或者64位
    uintptr 无符号整型,用于存放一个指针

    float32,float64

    float32  IEEE-754 32位浮点型数
    float64  IEEE-754 64位浮点型数

    complex64,complex128

    complex64 32 位实数和虚数
    complex128 64 位实数和虚数

    byte  类似unit8

    rune  类似int32  (注:Go中没有char )

    string

    一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的,字节使用UTF-8编码标识Unicode文本。

    分支循环

    if 语句

    If的条件里可以赋值;赋值的变量作用域在该if语句

    语法:

    switch语句

    switch会自动break 除非使用fallthrough(必须在某个case最后一行,否则编译器会报错)

    注:如果switch没有表达式,它会匹配true,Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动下面语句

    switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

    例子:

    select语句

    类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

    循环语句

    for是唯一的循环语句。(Go没有while循环)

    for条件里可省略初始条件,结束条件。  for 初始条件; 循环条件; 结束条件 { } ,初始化语句只执行一次

    for循环条件可选:for condition { }  相当于while 。注:for { } 相当于死循环,效果等同于for(;;)

    注意:在for循环中声明的变量仅在循环范围内可用。因此,i不能在外部访问循环。

    for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环

    break:跳出循环体。break语句用于在结束其正常执行之前突然终止for循环。

    continue:跳出一次循环。continue语句用于跳过for循环的当前迭代。

    goto:可以无条件地转移到过程中指定的行。

    函数

    函数返回多个值时可以起名字,仅用于非常简单函数(对调用者无区别)

    可变参

    定义 func myfunc(arg ...int) {} 函数体中变量arg是一个int的slice

    参数传递

    Go语言函数参数传递也存在:值传递和引用传递

    比如: func add1(a *int) int 定义了一个引用传递,其返回值是 return *a 使用方法是 x := add1(&x0) 

    闭包

    Go支持匿名函数,可作为闭包

    匿名函数

    指针

    指针作为接收者:

    工程目录结构:

    atomic.go学习

     

    读取文件

     

    打印文件

    打印跨行字符串

    branch.go

    convertToBin

     func.go学习

     

     

     basic.go

     triangle_test.go

    输出是:

  • 相关阅读:
    LGPrep的一点小问题
    百度地图API的事件处理:覆盖物阻止冒泡
    HTML5截取视频第一帧作为预览图片
    20165105 第二周学习总结
    20165105课下作业
    20165105第一周学习查缺补漏
    第四周课下作业20165105
    20165105 201620172 《Java程序设计》第1周学习总结
    我期望的师生关系
    .NET使用NPOI组件将数据导出Excel
  • 原文地址:https://www.cnblogs.com/ycx95/p/9358739.html
Copyright © 2020-2023  润新知