美文网首页
Go 常见错误

Go 常见错误

作者: _羊羽_ | 来源:发表于2019-02-19 00:44 被阅读2次

:= 变量声明

":=" 是在声明和初始化变量,因此该变量必须是第一次出现, 声明和赋值必须是一气呵成的,不能写成先声明后赋值这种形式,这个必须在函数体内才行。

package main

myvar := 1 //error

func main() {  
}
运行结果:
# command-line-arguments
./hello_world.go:3: non-declaration statement outside function body

go不允许variable := something这种变量的赋值出现在函数体外,但是这种是可以的:

package main

var myvar = 1 

func main() {
}

不能用nil初始化无类型变量

nii可以用于 interfaces, functions, pointers, maps, slices, and channels,但一定得有类型。

package main

func main() {
    var x = nil //error

    _ = x
}
# command-line-arguments
./hello.go:4: use of untyped nil

字符串不能被赋为"空"

package main

func main() {
    var x string = nil //error

    if x == nil { //error
        x = "default"
    }
}
./hello.go:4: cannot use nil as type string in assignment
./hello.go:6: invalid operation: x == nil (mismatched types string and nil)

空的slice 和map

slice是可以的

package main

func main() {  
    var s []int
    s = append(s,1)
}

map 数不可以的 panic: assignment to entry in nil map

package main

func main() {  
    var m map[string]int
    m["one"] = 1 //error

}

map 容量

可以指定容量大小 但不可以是有cap 函数

func main() {  
    m := make(map[string]int,99)
    cap(m) //error
}

Strings Can't Be "nil"

字符串不能为空

package main

func main() {  
    var x string = nil //error

    if x == nil { //error
        x = "default"
    }
}

字符串默认是""

func main() {
    var x string //defaults to ""

    if x == "" {
        x = "default"
    }
    fmt.Printf("string default:%v",x);
}

数组是引用值类型 修改值需要传递指针

当前不会修改数组里面值的内容

package main

import "fmt"

func main() {  
    x := [3]int{1,2,3}

    func(arr [3]int) {
        arr[0] = 7
        fmt.Println(arr) //prints [7 2 3]
    }(x)

    fmt.Println(x) //prints [1 2 3] (not ok if you need [7 2 3])
}

需要使用指针

func main() {  
    x := [3]int{1,2,3}

    func(arr *[3]int) {
        (*arr)[0] = 7
        fmt.Println(arr) //prints &[7 2 3]
    }(&x)

    fmt.Println(x) //prints [7 2 3]
}

range

range 遍历包含2个值 第一个是当前的数组下标,第二个才是存储的值

func main() {  
    x := []string{"a","b","c"}

    for v := range x {
        fmt.Println(v) //prints 0, 1, 2
    }
}
func main() {  
    x := []string{"a","b","c"}

    for _, v := range x {
        fmt.Println(v) //prints a, b, c
    }
}

map 的遍历

    x := map[string]string{"one":"a","two":"b","three":"c"}
    if v,ok := x["two"]; !ok { //incorrect
        fmt.Println("no entry")
    }else {
        fmt.Println(v)
    }
}

Strings Are Immutable

字符串是只读形式的字符切片 如果需要修改当前字符里面的字符 需要将字符串转换成
字符切片

x := "text"
    x[0] = 'T'

    fmt.Println(x)
x := "text"
    xbytes := []byte(x)
    xbytes[0] = 'T'

    fmt.Println(string(xbytes)) //prints Text

JSON编码

The struct fields starting with lowercase letters will not be (json, xml, gob, etc.) encoded, so when you decode the structure you'll end up with zero values in those unexported fields.
首字母小写是无法被json 匹配的

package main

import (
    "fmt"
    "encoding/json"
)

type MyData struct {
    One int
    two string
}
func main() {
    in := MyData{1,"two"}
    fmt.Printf("%#v\n",in) //prints main.MyData{One:1, two:"two"}

    encoded,_ := json.Marshal(in)
    fmt.Println(string(encoded)) //prints {"One":1}

    var out MyData
    json.Unmarshal(encoded,&out)
    fmt.Printf("%#v\n",out) //prints main.MyData{One:1, two:""}
}

相关文章

  • Go 常见错误

    := 变量声明 ":=" 是在声明和初始化变量,因此该变量必须是第一次出现, 声明和赋值必须是一气呵成的,不能写成...

  • Go常见错误

    go run: cannot run non-main package新手常见错误:package 名称必须是ma...

  • GOPATH相关

    目录内容 /src/pkg/bin 关于go get命令 使用go get命令时常见错误: exec: "hg":...

  • go常见错误总结

    使用go get下载的golangci-lint一直有问题,无奈只能离线下载包,结果发现直接能用 https://...

  • Go 陷阱和常见错误

    本文为国外Gopher的常见错误总结,以下为出处: 原文:http://devs.cloudimmunity.co...

  • Go 常见错误(随时更新)

    1.cannot find main module;see 'go help modules'报错无法运行 开启了...

  • Go:常见错误集合(1)

    JSON反序列化Int64类型JSON在序列化结构体的时候,如果结构体中包含Int64类型的数值类型,序列号之后会...

  • golang tips

    参考: Go的50度灰:Golang新开发者要注意的陷阱和常见错误 Traps, Gotchas, and Com...

  • go 代码评审常见问题

    该页面收集了对 Go 进行代码评审时的常见评论和其内涵,利用它们可以做到言简意赅。注意这是常见错误的清单,而不是风...

  • 2018-06-12

    GO 一些常见的并发编程错误 onelang Ohcount:源代码行计数器和分析器 HBase, Phoenix...

网友评论

      本文标题:Go 常见错误

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