Go语言基础语法

幸运草 2020年4月15日21:00:40前端框架评论阅读模式

抽空看了一下go,顺便做了个总结。话说go的语法还真感觉有点特别,而且抽象层次更高,对初学者可能障碍更多。还是按照之前的套路,我做了一个简化版的go语言语法小结,仅供参考。

变量声明定义的三种方式

var a int
a = 10
var a = 10
// 只能用在函数体内
a := 10

数据类型

bool

var b = true
if b {
    fmt.Println("This is true")
}

slice

    /* Format 1 */
    var p = []int{2, 3, 5, 7, 11, 13}
    fmt.Println("p ==", p)
    for i := 0; i < len(p); i++ {
        fmt.Printf("p[%d] == %dn", i, p[i])
    }
    /* Format 2 */
    var a []int
    if a == nil {
        fmt.Println("nil!")
    }
    a = make([]int, 5, 5)
    a[0] = 1
    /* Format 3 */
    b := make([]int, 0, 5)

map

        /* Create a map */
    type Vertex struct {
        Lat, Long float64
    }
    var m map[string]Vertex
    m = make(map[string]Vertex)

        /* Assign the value */
    m["Bell Labs"] = Vertex{
        40.68433, -74.39967,
    }
    m["AT&T Labs"] = Vertex{
        40.68433, -74.39967,
    }
    fmt.Println(m["Bell Labs"])

        /* Lookup the value with key */
    v, ok := m["AT&T Labs"]
    if ok {
        fmt.Println(v)
    } else {
        fmt.Println("No such element")
    }

        /* Delete a key */
    delete(m, "AT&T Labs")
    v, ok = m["AT&T Labs"]
    if ok {
        fmt.Println(v)
    } else {
        fmt.Println("No such element")
    }

控制语句

for

        /* same as for in c */
    var sum int
    sum = 0
    for i := 0; i < 10; i++ {
        sum += i
    }
    fmt.Println(sum)

        /* similar with while in c */
    sum = 1
    for sum < 1000 {
        sum += sum
    }
    fmt.Println(sum)

        /* loop on range */
    var a [10]int
    for i, val := range a {
        fmt.Printf("Value[%d] %dn", i, val)
    }
    for _, val := range a {
        fmt.Println("Value ", val)
    }

if

    if age > 18 {
        fmt.Println("Adult")
    } else if age > 3 {
        fmt.Println("Child")
    } else {
        fmt.Println("Elphan")
    }

函数定义

函数

func sum(a int, b int) int {
    return a + b
}

多返回值

func swap(x, y string) (string, string) {
    return y, x
}
a, b = swap("hello", "world")
fmt.Println(a, b)

多返回值2

func concat(x, y string) (int, string) {
    return len(x + y), x + y
}
length, _ = concat("hello ", "world")
fmt.Println(length)

闭包函数

如果对c语言有深入研究,闭包函数其实就是函数+静态变量。

package main
import "fmt"
func fibonacci() func() int {
    /* use -1 to indicate the value is uninitialized */
    gp, p, fib := -1, -1, 0
    return func() int {
        if p == -1 {
            p = 0
            return 0
        } else if gp == -1 {
            p = 1
            gp = 0
            return 1
        }
        fib = gp + p
        gp = p
        p = fib
        return fib
    }
}
func main() {
    f := fibonacci()
    for i := 0; i < 10; i++ {
        fmt.Println(f())
    }
}

方法

type Circle struct {
    radius float64
}

/* Really magic */
func (c Circle) getArea() float64 {
    return 3.14 * c.radius * c.radius
}
var c1 Circle
c1.radius = 10.0
fmt.Println(c1.getArea())

特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
幸运草
Go语言接口规则 前端框架

Go语言接口规则

Go语言接口规则 接口是一个或多个方法签名的集合。任何类型的方法集中只要拥有该接口对应的全部方法签名。就表示它 "实现" 了该接口,无须在该类型上显式声明实现了哪个接口。对应方法,是指有相同名称、参数...
Go语言中处理 HTTP 服务器 前端框架

Go语言中处理 HTTP 服务器

1 概述 包 net/http 提供了HTTP服务器端和客户端的实现。本文说明关于服务器端的部分。 快速开始: package main import (   "log"   "net/http" )...

发表评论