第一章 go基础语法

前端之家收集整理的这篇文章主要介绍了第一章 go基础语法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

0.前言

1. go定义变量的几种方式

2. go内建变量类型

3. 常量的定义

4. go枚举

5. go的if语句

 


零. go语言的换行

go语言对换行很有讲究,如果想换行,必须有一个逗号,否则就会报错

 

 变量p编译都不通过,因为最后的}换行了,换行必须要有逗号. 写成pp的样子就可以了

 

一. go定义变量的集中方式

1. go一旦定义就有一个默认的值

具体每一种类型的默认初始化值是什么?

 

 

2. go如何定义变量初始化

第一种方式: 只声明,不赋值

var int a;
var string b

  第二种方式: 变量会自动识别变量类型

var a,b,c,d = 1,"您好",false,10.1

第三种方式: 通过 := 的方式赋值

a,b := "我",1)">10

注意:

  1. 使用:= 赋值运算符,至少要有一个变量是未定义过的. 
  2. 函数外面定义的变量不可以使用:=赋值运算符. 在函数外面必须要有var,或者 func关键字
  3. 函数外定义的变量不是全局变量,他是包变量,在包内部共享的变量.
  4. go没有全局变量的说法

 

第四种方式: 使用var()

var (
      a = 10
      b = "您好"   
)

  

  

 二. go内建变量类型

  • bool,string
  • (u)int, (u)int8, (u)int16, (u)int32, (u)int64,uintptr 
  • byte,rune. 
  • float32,float64,complex64,complex128

int类型的内建变量有11中

  1. 不带u的是有符号变量.  不带u的有符号变量还是有两类
    • 有长度指定的. int8,int16,int32,int64是有长度的. 在go中没有short,long类型的,就通过int的位数来定义
    • 无长度指定的. int是无长度的,他的长度随操作系统不同而不同. 32位操作系统,int是32位的,64位操作系统,int是64位的. 
  2. 带u的是无符号变量
  3. uintptr是int类型的指针. 他是无符号的. 指针的长度也是跟着操作系统来的.

rune类型是go语言的char类型

  1. rune是32位的. 占4个字节.  unicode中一个字符是2字节,在utf-8中一个字符是3字节,所以,rune采用了32位的4字节. rune和byte都是可以和int类型互相转化的

float类型

  1. 浮点数类型没有float和double. 直接通过位数来指定. float32就是32位的浮点数. float64就是64位的浮点数

complex类型

  1. complex是复数的意思. 这里指定了复数的构成. 复数直接就作为了一个内嵌变量的类型
  2. 复数有实部和虚部,complex64就是实部和虚部都是32位,complex128就是实部和虚部都是64位. 这样可以处理比较复杂的数据计算.

 java和go数据类型对比

 

 

三. 常量的定义

方式一: 使用const定义

const aa = 3

方式二: 如果有多个变量,可以使用const()定义

const(
       aa = 10
       bb = 100    
)  

备注: 1. go语言中的常量一般不全部大写,因为在go中,大小写是有含义的. 就像普通变量的命名规则就可以了

 

四. go枚举类型

1. 定义一个枚举 

func enums(){
      const (
            cpp = 1
            java = 2
            PHP = 3
            go = 4
            python = 5
      )

     fmt.println(cpp,java,PHP,go,python)
}

打印结果: 1,2,3,4,5

 

2. 使用自动增长值的方式

func enums()
      const (
            cpp = iota
            _ 
            PHP 
            go 
            python 
            javascript
      )

     fmt.println(cpp,javascript,6,4

3. 复杂的自增长类型

func enums()
      const (
            b = 1<<(10* iota)
            kb 
            mb 
            gb 
            tb 
            pb
      )

     fmt.println(b,kb,mb,gb,tb,pb)
}

打印结果:1  1024  1048576,  1073741824,   1099511627776,  1125899906842624  

备注:  [1<<(10 * iota)的含义时: 如果: iota=0,i* 2的0次方,iota=1,1*2的10次方. 如果iota=2,就是1*2的20次方,一次类推]

 五. go条件语句

1. if语句

这里和其他语言都基本类似,有一点,可以将查询返回的结果和if语句写在一行. 类似下面这样

 

 2. switch语句

    • switch语句其他语言不一样的地方时. 每一个case后面不用显示的写break. go语言默认会在每一个case后面加上break. 如果不想break,需要显式的加上fallthrough
    • switch语句后面可以没有表达式,直接在case里判断

 例如: 

package main

import "fmt"

func useSwitch(grade int) 
    switch {
    case grade < 0 || grade > 100:
        panic("分数异常")
    case grade < 60:
        fmt.Println("不及格")
    case grade >= 60 && grade <= 80:
        fmt.Println("良好")
    case grade > 80 && grade <= 100:
        fmt.Println("优秀")

    }
}

func main() 
    useSwitch(40)
    useSwitch(65)
    useSwitch(85)
    useSwitch(100)
    useSwitch(-20)
}

 

3. for循环.  

    • go里只有for循环,没有while循环和while...do 循环. 取而代之的是,for循环有多种形式
    • for循环没有初始变量,只有结束条件和递增条件. 就相当于是while...do. 见下demo
    • for循环没有初始变量,没有逻辑处理条件,只有一个结束条件,就相当于是while
    • for没有初始变量,没有结束条件,就是一个无限循环. 
@H_676_301@

 

 

 

 

@H_676_301@ 这里面有三个for循环,初始条件为空,有循环条件和运算,相当于while....do

@H_676_301@第二个for循环是一个死循环. Go里有gorouting,会经常使用到死循环.

@H_676_301@第三个for循环初始条件和运算都为空,只有循环条件. 相当于while. 

@H_676_301

猜你在找的Go相关文章