第一章 go基础语法

简介: 1. go定义变量的几种方式 2. go内建变量类型 3. 常量的定义 4. go枚举 5. go的if语句

0.前言


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


2. go内建变量类型


3. 常量的定义


4. go枚举


5. go的if语句


零. go语言的换行


go语言对换行很有讲究, 如果想换行,必须有一个逗号, 否则就会报错微信图片_20220509154508.png变量p编译都不通过, 因为最后的}换行了, 换行必须要有逗号. 写成pp的样子就可以了

 

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


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


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

 

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


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


var int a;
var string b


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


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


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


a, b := "我", 10


注意:


  1. 使用:= 赋值运算符, 至少要有一个变量是未定义过的.


  1. 在函数外面定义的变量不可以使用:=赋值运算符. 在函数外面必须要有var, 或者 func关键字


  1. 在函数外定义的变量不是全局变量, 他是包变量, 在包内部共享的变量.


  1. 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位的. 


  1. 带u的是无符号变量


  1. 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是复数的意思. 这里指定了复数的构成. 复数直接就作为了一个内嵌变量的类型


  1. 复数有实部和虚部, complex64就是实部和虚部都是32位, complex128就是实部和虚部都是64位. 这样可以处理比较复杂的数据计算.


java和go数据类型对比

微信图片_20220509154921.png三. 常量的定义


方式一: 使用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, php, go ,python)
}


打印结果: 1, 6, 2, 3, 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语句写在一行. 类似下面这样微信图片_20220509155101.png


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没有初始变量, 没有逻辑处理条件, 没有结束条件, 就是一个无限循环.


  • 微信图片_20220509155142.png


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


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


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

相关文章
|
2月前
|
Java 编译器 Go
Go to Learn Go之基础语法
Go to Learn Go之基础语法
18 0
|
5月前
|
存储 Java Go
|
5月前
|
编译器 Go 开发者
|
6月前
|
Java 编译器 Go
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(一)
本文主要梳理自第六届字节跳动青训营(后端组)-Go语言原理与实践第一节(王克纯老师主讲)。
176 1
|
6月前
|
编译器 Go
Go 语言基础语法
Go 语言基础语法
44 1
|
5月前
|
Go
go基础语法结束篇 ——函数与方法
go基础语法结束篇 ——函数与方法
|
5月前
|
编译器 Go 数据安全/隐私保护
go语言入门之路——基础语法
go语言入门之路——基础语法
|
5月前
|
存储 安全 Java
【Go语言精进之路】Go语言基础:基础语法概览
【Go语言精进之路】Go语言基础:基础语法概览
52 0
|
6月前
|
存储 Go C语言
【GO基础】GO基础语法一
【GO基础】GO基础语法一
|
5月前
|
Java Go Scala