Go语言语法基础和三个示例 | 青训营笔记

45 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第1天

1包

package main

import "fmt"

func main(){

fmt.Println("Hello world") }

  1. 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

2.下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。

$ go run hello.go Hello, World!

$ go build hello.go

$ ls

hello hello.go

$ ./hello

Hello, World! 2变量,常量,运算符

Go变量声明

Go语言声明的变量除了全局变量,必须使用

var 变量名 变量类型 //var a int=10 ,类型可省,自动判断 或者 变量名:=类型(值) // b:=float32(1.2)

intVal := 1 相等于:

var intVal int

intVal =1

批量声明 var (

a int

b string .... )

空白标识符 _ 也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。

常量 const s string ="hello" //可省略类型, const会自动判断

iota用法

const (

a = iota //0

b //1

       c          //2
        d = "ha"   //独立值,iota += 1
        e          //"ha"   iota += 1
        f = 100    //iota +=1
        g          //100  iota +=1
        h = iota   //7,恢复计数,不然下面的都是100
        _          /跳过忽略8
        i          //9
)

const (

i=1<<iota    //左移0位,所以还是1 ,i=1<<n*iota,左移0*n位 
j            //左移1位,2

k            //左移2位,4

l
)

多个iota定义在一行 const (

            a, b = iota + 1, iota + 2 //1,2
            c, d                      //2,3
            e, f                      //3,4
    )

运算符 与C语言基本一致 算术运算符里的自增,自减,只能右自增自减, 如i++可以,++i不行 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符:&引用和指针*

3条件语句和循环语句 条件语句

if 表达式1 { //这个{必须和判断表达式1在同一行 ,表达式1不用加(),加了执行中会去掉 分支1 } else if 表达式2 { //}位置无所谓 分支2 } else{ 分支3 } //整体和C一样

switch

switch var1 { //和C比,Go的switch,默认全加了break case val1: ... case val2,var3: //多种情况 ... default: ...}

switch-type常来判断某个 interface 变量中实际存储的变量类型

switch x.(type){ // case type: statement(s);
case type: statement(s); /* 你可以定义任意个数的case / default: / 可选 */ statement(s);}

fallthrough 会强制执行后面的 case 语句,无论是否符合 select select 是 Go 中的一个控制结构,类似于 switch 语句。 select 语句只能用于通道操作,每个case必须是一个通道操作,要么是发送要么是接收 select会监听所有通道: 如果多个通道都准备好,那么 select 语句会随机选择一个通道执行。如果所有通道都没有准备好,那么执行 default 块中的代码。

  • 所有 channel 表达式都会被求值
  • 所有被发送的表达式都会被求值

select { case <- channel1: // 执行的代码 case value := <- channel2: // 执行的代码 case channel3 <- value: // 执行的代码 ... default: // 所有通道都没有准备好,执行的代码 }

循环语句 Go 语言中的所有循环类型均可以使用for关键字来完成。 for 初始语句;条件表达式;结束语句{ 循环体语句 }

for循环的初始语句和结束语句都可以省略,例如:

func forDemo3() {

   i := 0
    for i < 10 {    //这个时候前后两个;都可以省略,等同于while
            fmt.Println(i)
            i++
    }}
    

无限循环 for { 循环体语句 } 可以通过break、goto、return、panic语句强制退出循环 Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:

  1. 数组、切片、字符串返回索引和值。
  2. map返回键和值。
  3. 通道(channel)只返回通道内的值。

break 和continue可以使用标签块, 进行跳出和继续

re:

for i := 1; i <= 3; i++ {
    fmt.Printf("i: %d\n", i)
    for i2 := 11; i2 <= 13; i2++ {
        fmt.Printf("i2: %d\n", i2)
            continue re //直接continue到re的部分
        }
}

结果 i: 1 i2: 11 i: 2 i2: 11 i: 3 i2: 11

goto语句通过标签进行代码间的无条件跳转