Go语言基础语法

Posted 杨小伟的世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言基础语法相关的知识,希望对你有一定的参考价值。

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

参考资料:

https://gobyexample.com
http://www.runoob.com/go/go-tutorial.html

变量声明定义的三种方式

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] == %d\n", 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] %d\n", 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())

以上是关于Go语言基础语法的主要内容,如果未能解决你的问题,请参考以下文章

你知道的Go切片扩容机制可能是错的

每天一点Go语言——Go语言语法基础及基本数据类型

go语言--基础语法与使用

Go语言语法及特性总结

go语言基础语法篇-变量

go语言基础语法篇-变量