前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >半天学会 Go 语言语法

半天学会 Go 语言语法

作者头像
音视频_李超
发布2020-04-02 18:37:10
3720
发布2020-04-02 18:37:10
举报
前言

现在 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 定义变量

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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 函数

代码语言:javascript
复制
package main

import "fmt"

func sum(a, b int) int {

    return a + b
}

func main() {

    fmt.Println("the result is ", sum(4, 5))
}

Go 数组

代码语言:javascript
复制
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 指针

代码语言:javascript
复制
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 库打开侦听端口
  • 设置收到网络数据后的回调函数
代码语言:javascript
复制
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服务器

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本语言
    • Go 定义变量
      • Go 使用if/else
        • Go 使用 for
          • Go 函数
            • Go 数组
              • Go 指针
              • Go 特性
              • 如何使用Go语言
              • 小结
              • 参考
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档