美文网首页go
半天学会 Go 语言语法

半天学会 Go 语言语法

作者: 音视频直播技术专家 | 来源:发表于2018-11-07 21:54 被阅读116次

    前言

    现在 Go 语言越来越流行,它背后有 Google的支持,而且已经有很多人开始使用 Go 语言做服务端开发。现在我们就来看一下该如何快速的学习Go 语言。

    在学习一门语言之前,首先我们要了解都该学习这门语言的那些知识点。我这里简单列举一下:

    • 基本语法,包括变量/常量的定义,数组,if/else语句,for循环,函数,结构体以及指针。
    • Go 特性
    • 如何使用Go语言

    下面我们就一项一项来看。

    基本语言

    Go的基本语法与其它语言都差不多,我们学习语言的最好方法就是类比法。我用这种方法学习新语言百试不爽。

    知识点 C语言 go语言 说明
    定义变量 int a; var a int
    定义常量 const int a = 3.14; const a int = 3.14
    if语句 if (a>b){} if a>b {};
    for循环 for(int a=0; a <10; a++){} for a:=0; a<10; a++ {}
    函数 int func(int a, int b){} func myfunc( a int, b int) int {}
    多值返回 void myfunc(int * out1, int* out2){}; func myfunc() (int, int) {return y, x} C语言输过输出参数,go直接返回
    数组 int arr[10]; var arr [10] int
    结构体 struct aaa{ int a; int b;}; type aaa struct {a int b int}
    指针 int *p = NULL; var p *int go不需要释放空间
    管道 无,可以自己实现queue channel go中的channel就是一个队列,用于goroutine通讯用

    看几个代码例子:

    Go 定义变量

    package main //可执行的go程序必须使用package main
    
    import "fmt" //引入文件,类似于 C 语言中的 #include。fmt 类似于stdio.h
    
    func main() { // main 函数入口点
    
        var a int
        var b float32
    
        var c, d float64
    
        e, f := 9, 10
    
        a = 5
        b = 3.3
    
        c = 8.1
        d = c
    
        fmt.Println(a, b, c, d, e, f)
    
    }
    
    

    Go 使用if/else

    package main
    
    import "fmt"
    
    func main() {
    
        a := 7.0
        b := 9.0
    
        fmt.Println(a, b)
    
        if a > b {
            fmt.Println("a > b")
        } else {
            fmt.Println("b > a")
        }
    }
    

    Go 使用 for

    package main
    
    import "fmt"
    
    func main() {
    
        for a := 0; a < 10; a++ {
            fmt.Println(a)
        }
    
        b := 0
        for true {
            fmt.Println(b)
            b++
            if b >= 10 {
                break
            }
        }
    }
    

    Go 函数

    package main
    
    import "fmt"
    
    func sum(a, b int) int {
    
        return a + b
    }
    
    func main() {
    
        fmt.Println("the result is ", sum(4, 5))
    }
    

    Go 数组

    package main
    
    import "fmt"
    
    func main() {
    
        var arr0 = [3]int{9, 8, 7}
        var arr1 [5]int
        var arr2 = [...]float32{5, 5, 5, 6, 6, 6}
    
        for i := 0; i < 5; i++ {
            arr1[i] = i
        }
    
        fmt.Println(arr1[0], arr1[1], arr1[2], arr1[3], arr1[4])
    
        for i := 0; i < 3; i++ {
            fmt.Println(arr0[i])
        }
    
        for i := 0; i < 6; i++ {
    
            fmt.Println(arr2[i])
        }
    }
    

    Go 指针

    package main
    
    import "fmt"
    
    func main() {
    
        var a int
        var p *int
    
        a = 5
        fmt.Println("before a=", a)
    
        p = &a
    
        *p = 6
    
        fmt.Println("after a=", a)
    }
    

    Go 特性

    • 可执行的Go文件必须包括 package main
    • 在Go文件中的函数名如果以大写字符开头,则其它Go文件可以访问。否则只能 Go内部访问。
    • Go 引入了切片的概念,其实就是动态数组。
    • Go语言支持匿名函数/闭包(lamda),可以把它想像成回调函数。举个例子:
      func (srv *Server) Serve(l net.Listener) error {}如何理解呢?它的含义是定义了一个匿名函数,它的输入参数是srv 类型为 Server 指针,输出参数是 Serve 函数,它的输入是 l 类型是 net.Listener, 返回值为 error。
    • defer 函数用于资源的释放,会在函数返回之前进行调用。

    如何使用Go语言

    Go语言是 Google 专门用于开发服务器的一种语言,主要是网络服务器程序。下面我们就来看一下Go如何实现一个最简单的 Web 服务。

    这个 Web 服务有几个重要的点:

    • 引入 net/http 库
    • 通过 http 库打开侦听端口
    • 设置收到网络数据后的回调函数
    package main
    import (
        "fmt"
        "net/http"
        "strings"
        "log"
    )
    
    func sayhelloName(w http.ResponseWriter, r *http.Request) {
        r.ParseForm() //解析参数,默认是不会解析的
        for k, v := range r.Form {
            fmt.Println("key:", k)
            fmt.Println("val:", strings.Join(v, ""))
        }
        fmt.Fprintf(w, "Hello Wrold!") //这个写入到w的是输出到客户端的
    }
    
    func main() {
        http.HandleFunc("/", sayhelloName) //设置回调函数
        err := http.ListenAndServe(":9090", nil) //设置监听的端口
        if err != nil {
            log.Fatal("ListenAndServe: ", err)
        }
    }
    

    小结

    本文首先通过类比法,通过与C语言的类比来看Go是如何学习的。然后又介绍如何通过Go实现一个最简单的WebServer。通过上面的介绍大家是不是觉得Go语言还是非常好学且功能很强大的一门语言呢?

    参考

    go 语言菜鸟教程
    搭建一个简单的Go Web服务器

    相关文章

      网友评论

        本文标题:半天学会 Go 语言语法

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