美文网首页
Go语言基础篇

Go语言基础篇

作者: taobao | 来源:发表于2021-07-28 20:15 被阅读0次

:= 赋值操作

  • 在函数体内,系统可以自动推断类型,所有可以使用 := 简化变量的出事话
var a int = 1;       
a := 1;

var str string = "abc" 
str := "abc"
  • 简写形式仅限函数体内,而全局的变量申明不能采用简体
package main

import "fmt"

//标准形式
var a int = 1
var b,c int = 2,3
var str string = "abc"
var str1,str2 string = "bcd","cde"

func main()  {
    //简写形式
    d := 4
    e, f := 5, 6
    str3 := "abcd"
    str4,str5 := "aaa", "bbb"
    fmt.Println(a, b, c, d, e, f);
    fmt.Println(str, str1, str2, str3, str4, str5)
}

常量

package main

import "fmt"

func main() {

    //常量一般定义
    const a int = 10

    //常量可以省略类型
    const b = 20
    fmt.Println(a, b)

    //常量可以用作枚举
    const (
        TYPE1 = 0
        TYPE2 = 1
    )
    fmt.Println(TYPE1, TYPE2)

    //特殊常量 iota
    /**
     * 可以被编译器修改的常量
     * 在const关键字出现时,会被设置为0 const中每一行都会使iota自增1
     */
    const (
        aa = iota
        bb
        cc = iota
    )
    fmt.Println(aa, bb, cc)

    const aaa = iota
    const bbb = iota
    fmt.Println(aaa, bbb)

}

switch语法

package main

import "fmt"

func main() {

    mark := "A"
    num := 0

    //不需要加break
    switch mark {
        case "A":
            num = 1;
        case "B":
            num = 2;
        default:
    }
    fmt.Println(mark, num)

    //type-switch判断interface变量中实际存储的变量类型
    var x interface{}
    switch x.(type) {
        case nil:
            fmt.Println("x is nil")
        case int:
            fmt.Println("x is int")
        default:
            fmt.Println("x type is unknow")
    }

    //fallthrought 会强制执行匹配case后面的一个case语句,不会判断表达式是否成立
    switch mark {
        case "A":
            fmt.Println("mark is A")
            fallthrough
        case "B":
            fmt.Println("mark is B")
            fallthrough
        case "C":
            fmt.Println("mark is C")
        case "":
            fmt.Println("mark is C")
        default:
            fmt.Println("mark is default")
    }
}

select

每个case 必须是一个通信操作,要么是发送,要么是接收
select会随机执行一个case。如果没有case可执行,将阻塞知道有case可运行

package main

import "fmt"

func main() {
   var c1, c2, c3 chan int
   var i1, i2 int
   select {
      //接收
      case i1 = <-c1:
         fmt.Printf("received ", i1, " from c1\n")
      //发送
      case c2 <- i2:
         fmt.Printf("sent ", i2, " to c2\n")
      //包含状态判断
      case i3, ok := (<-c3):  // same as: i3, ok := <-c3
         if ok {
            fmt.Printf("received ", i3, " from c3\n")
         } else {
            fmt.Printf("c3 is closed\n")
         }
      default:
         fmt.Printf("no communication\n")
   }    
}
package main

import (
    "fmt"
    "time"
)

func Chann(ch chan int, stopCh chan bool) {
    var i int
    i = 10
    for j:=0; j<10; j++ {
        ch <- i;
        t := time.Second
        time.Sleep(t)
    }
    stopCh <- true
}

func main() {
    ch := make(chan int)
    c := 0
    stopCh := make(chan bool)

    go Chann(ch, stopCh)
    for {
        select {
            case c = <-ch:
                fmt.Println("Receive 1: ", c)
                //fmt.Println("channel")
            case s := <-ch:
                fmt.Println("Receive 2:", s)
            case t := <-ch:
                fmt.Println("Receive 3:", t)
            case _ = <-stopCh:
                goto end
        }
    }
end:
}

循环相关

  • 跳出循环break
package main

import "fmt"

func main() {

    // 不使用标记
    fmt.Println("---- break ----")
    for i := 1; i <= 3; i++ {
        fmt.Printf("i: %d\n", i)
                for i2 := 11; i2 <= 13; i2++ {
                        fmt.Printf("i2: %d\n", i2)
                        break
                }
        }

    // 使用标记
    fmt.Println("---- break label ----")
    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)
                break re
            }
        }
}
  • continue
package main

import "fmt"

func main() {

    // 不使用标记
    fmt.Println("---- continue ---- ")
    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
            }
    }

    // 使用标记
    fmt.Println("---- continue label ----")
    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 ---- 
i: 1
i2: 11
i2: 12
i2: 13
i: 2
i2: 11
i2: 12
i2: 13
i: 3
i2: 11
i2: 12
i2: 13
---- continue label ----
i: 1
i2: 11
i: 2
i2: 11
i: 3
i2: 11

相关文章

  • go语言基础

    go语言基础 go 语言接口

  • Go语言探索 - 3(原创)

    Go语言基础系列博客用到的所有示例代码 在上一篇文章中,我们主要学习了Go语言的编程基础。这些基础内容包括注释、分...

  • Go语言基础篇

    := 赋值操作 在函数体内,系统可以自动推断类型,所有可以使用 := 简化变量的出事话 简写形式仅限函数体内,而全...

  • 初识Go语言-1

    Go语言学习路径 初识Go语言 Go语言环境搭建与IDE安装 Go语言基础语法 Go语言数据类型 Go语言变量和常...

  • Go语言探索 - 11(原创)

    Go语言基础系列博客用到的所有示例代码 上一篇文章主要学习了Go语言的切片以及Map。本篇文章主要学习的是Go语言...

  • Go语言基础语法--注释、基础结构2

    章节 GO语言基础语法--注释、基础结构(重要) 1.GO语言基础语法---注释、基础结构 基础结构注意事项 源文...

  • Go语言入坑

    GO语言基础 认识并安装GO语言开发环境 Go语言简介 Go语言是谷歌2009年发布的第二款开源编程语言 go语言...

  • Go语言探索 - 4(原创)

    Go语言基础系列博客用到的所有示例代码 在上一篇文章中,主要学习了Go语言的变量、指针、指针变量、常量以及类型转换...

  • Go语言探索 - 2(原创)

    Go语言基础系列博客用到的所有示例代码 在上一篇文章中,我们主要学习了Go语言环境的安装、IDE的基本安装和使用,...

  • go基础

    go 语言基础知识汇总

网友评论

      本文标题:Go语言基础篇

      本文链接:https://www.haomeiwen.com/subject/qmgzmltx.html