go变量

作者: 小棋子js | 来源:发表于2020-06-30 17:51 被阅读0次

    := 语句是申明并初始化变量的简写,例如这个例子中的 var f string = "short"。

    for j := 7; j <= 9; j++ {
            fmt.Println(j)
        }
    

    注意,在 Go 中,你可以不适用圆括号,但是花括号是需要的。
    Go 里没有三目运算符,所以即使你只需要基本的条件判断,你仍需要使用完整的 if 语句。

     i := 2
        fmt.Print("write ", i, " as ")
        switch i {
        case 1:
            fmt.Println("one")
        case 2:
            fmt.Println("two")
        case 3:
            fmt.Println("three")
        }
    

    // 切片slice

    package main
     
    import "fmt"
     
    func main () {
        s := make([]string, 0)
        s = append(s, "a", "b", "c", "d", "e", "f")
    
        c := make([]string, len(s))
        copy(c, s)
        fmt.Println("cpy:", c)
    
        l := s[2:5]
        fmt.Println("sl1:", l)
    
        l = s[:5]
        fmt.Println("sl2:", l)
    
        l = s[2:]
        fmt.Println("sl3:", l)
    
    // 要创建一个空 map,需要使用内建的 `make`:
        // `make(map[key-type]val-type)`.
        m := make(map[string]int)
    
        // 使用典型的 `make[key] = val` 语法来设置键值对。
        m["k1"] = 7
        m["k2"] = 13
    
        // 使用例如 `Println` 来打印一个 map 将会输出所有的
        // 键值对。
        fmt.Println("map:", m)
    
        // 使用 `name[key]` 来获取一个键的值
        v1 := m["k1"]
        fmt.Println("v1: ", v1)
    
        // 当对一个 map 调用内建的 `len` 时,返回的是键值对
        // 数目
        fmt.Println("len:", len(m))
    
        // 内建的 `delete` 可以从一个 map 中移除键值对
        delete(m, "k2")
        fmt.Println("map:", m)
    
        // 当从一个 map 中取值时,可选的第二返回值指示这个键
        // 是在这个 map 中。这可以用来消除键不存在和键有零值,
        // 像 `0` 或者 `""` 而产生的歧义。
        _, prs := m["k2"]
        fmt.Println("prs:", prs)
    
        // 你也可以通过这个语法在同一行申明和初始化一个新的
        // map。
        n := map[string]int{"foo": 1, "bar": 2}
        fmt.Println("map:", n)
    }
    

    //Range 遍历

    package main
    import "fmt"
    func main() {
    这里我们使用 range 来统计一个 slice 的元素个数。数组也可以采用这种方法。
    
        nums := []int{2, 3, 4}
        sum := 0
        for _, num := range nums {
            sum += num
        }
        fmt.Println("sum:", sum)
    range 在数组和 slice 中都同样提供每个项的索引和值。上面我们不需要索引,所以我们使用 空值定义符_ 来忽略它。有时候我们实际上是需要这个索引的。
    
        for i, num := range nums {
            if num == 3 {
                fmt.Println("index:", i)
            }
        }
    range 在 map 中迭代键值对。
    
        kvs := map[string]string{"a": "apple", "b": "banana"}
        for k, v := range kvs {
            fmt.Printf("%s -> %s\n", k, v)
        }
    range 在字符串中迭代 unicode 编码。第一个返回值是rune 的起始字节位置,然后第二个是 rune 自己。
    
        for i, c := range "go" {
            fmt.Println(i, c)
        }
    }
    
    $ go run range.go 
    sum: 9
    index: 1
    a -> apple
    b -> banana
    0 103
    1 111
    

    //函数

    package main
    import "fmt"
    这里是一个函数,接受两个 int 并且以 int 返回它们的和
    
    func plus(a int, b int) int {
    Go 需要明确的返回值,例如,它不会自动返回最后一个表达式的值
    
        return a + b
    }
    func main() {
    正如你期望的那样,通过 name(args) 来调用一个函数,
    
        res := plus(1, 2)
        fmt.Println("1+2 =", res)
    }
    $ go run functions.go 
    1+2 = 3
    

    结构体:Go 的结构体 是各个字段字段的类型的集合。这在组织数据时非常有用。

    package main
    import "fmt"
    这里的 person 结构体包含了 name 和 age 两个字段。
    
    type person struct {
        name string
        age  int
    }
    func main() {
    使用这个语法创建了一个新的结构体元素。
    
        fmt.Println(person{"Bob", 20})
    你可以在初始化一个结构体元素时指定字段名字。
    
        fmt.Println(person{name: "Alice", age: 30})
    省略的字段将被初始化为零值。
    
        fmt.Println(person{name: "Fred"})
    & 前缀生成一个结构体指针。
    
        fmt.Println(&person{name: "Ann", age: 40})
    使用点来访问结构体字段。
    
        s := person{name: "Sean", age: 50}
        fmt.Println(s.name)
    也可以对结构体指针使用. - 指针会被自动解引用。
    
        sp := &s
        fmt.Println(sp.age)
    结构体是可变的。
    
        sp.age = 51
        fmt.Println(sp.age)
    }
    $ go run structs.go
    {Bob 20}
    {Alice 30}
    {Fred 0}
    &{Ann 40}
    Sean
    50
    51
    

    排序:
    Go 的 sort 包实现了内置和用户自定义数据类型的排序功能。我们首先关注内置数据类型的排序。

    package main
    import "fmt"
    import "sort"
    func main() {
    排序方法是正对内置数据类型的;这里是一个字符串的例子。注意排序是原地更新的,所以他会改变给定的序列并且不返回一个新值。
    
        strs := []string{"c", "a", "b"}
        sort.Strings(strs)
        fmt.Println("Strings:", strs)
    一个 int 排序的例子。
    
        ints := []int{7, 2, 4}
        sort.Ints(ints)
        fmt.Println("Ints:   ", ints)
    我们也可以使用 sort 来检查一个序列是不是已经是排好序的。
    
        s := sort.IntsAreSorted(ints)
        fmt.Println("Sorted: ", s)
    }
    运行程序,打印排序好的字符串和整形序列以及我们 AreSorted测试的结构 true。
    
    $ go run sorting.go
    Strings: [a b c]
    Ints:    [2 4 7]
    Sorted:  true
    

    时间time

    package main
    import "fmt"
    import "time"
    func main() {
        p := fmt.Println
    得到当前时间。
    
        now := time.Now()
        p(now)
    通过提供年月日等信息,你可以构建一个 time。时间总是关联着位置信息,例如时区。
    
        then := time.Date(
            2009, 11, 17, 20, 34, 58, 651387237, time.UTC)
        p(then)
    你可以提取出时间的各个组成部分。
    
        p(then.Year())
        p(then.Month())
        p(then.Day())
        p(then.Hour())
        p(then.Minute())
        p(then.Second())
        p(then.Nanosecond())
        p(then.Location())
    输出是星期一到日的 Weekday 也是支持的。
    
        p(then.Weekday())
    这些方法来比较两个时间,分别测试一下是否是之前,之后或者是同一时刻,精确到秒。
    
        p(then.Before(now))
        p(then.After(now))
        p(then.Equal(now))
    方法 Sub 返回一个 Duration 来表示两个时间点的间隔时间。
    
        diff := now.Sub(then)
        p(diff)
    我们计算出不同单位下的时间长度值。
    
        p(diff.Hours())
        p(diff.Minutes())
        p(diff.Seconds())
        p(diff.Nanoseconds())
    你可以使用 Add 将时间后移一个时间间隔,或者使用一个 - 来将时间前移一个时间间隔。
    
        p(then.Add(diff))
        p(then.Add(-diff))
    }
    $ go run time.go
    2012-10-31 15:50:13.793654 +0000 UTC
    2009-11-17 20:34:58.651387237 +0000 UTC
    2009
    November
    17
    20
    34
    58
    651387237
    UTC
    Tuesday
    true
    false
    false
    25891h15m15.142266763s
    25891.25420618521
    1.5534752523711128e+06
    9.320851514226677e+07
    93208515142266763
    2012-10-31 15:50:13.793654 +0000 UTC
    2006-12-05 01:19:43.509120474 +0000 UTC
    

    相关文章

      网友评论

          本文标题:go变量

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