GO常见错误编程总结:第一篇

2020-09-20  本文已影响0人  风洛神

一。切片之间通过append追加

func main(){
  a:=[]int{1,2,3}
  b:=[]int{4,5,6}
//这个是错误的编程
  a=append(a, b) 
//正确的编程应该是
  a=append(a, b...)
}
//原因:切片之间通过append追加时要用 ... 符号,表示将b中的内容追加的a中。
//也可以通过 a=append(a, 4, 5, 6)这种方式追加

二。全局变量定义

var(
  a:=10 //错误编码
  b=a*2
)
func main(){
  fmt.println(b)
}
//原因:简写方式的定义变量只能在函数内部使用,全局变量不能使用。
//扩展:变量在定义时就初始化时,如果没有说明类型,编译器会根据所赋的值,自动推导

三。 结构体比较

type sn3 struct {
  name string
  age int
}
func main() {
    sn1 := struct {
        age  int
        name string
    }{age: 11, name: "qq"}
    sn2 := struct {
        age  int
        name string
    }{age: 11, name: "qq"}

    if sn1 == sn2 {
        fmt.Println("sn1 == sn2")
    }

    sm1 := struct {
        age int
        m   map[string]string
    }{age: 11, m: map[string]string{"a": "1"}}
    sm2 := struct {
        age int
        m   map[string]string
    }{age: 11, m: map[string]string{"a": "1"}}

    if sm1 == sm2 { //该处代码报错,编译不过
        fmt.Println("sm1 == sm2")
    }
}

四。类型别名和重新定义新的类型

type  MyType1  int
type MyType2 = int
func main(){
  var a int = 10
  var b MyType1 = a //此处代码编译不过
  var c MyType2 = a
}

五。go中iota的使用

const (
     x = iota
     _
     y
     z = "zz"
     k 
     p = iota
 )

func main()  {
    fmt.Println(x,y,z,k,p)  //打印的结果值为:0, 2, zz, zz, 5
}

六。go类型选择(type)

func GetValue() int{
  return 1
}
func main(){
  i:= GetValue()
  switch i.(type){  //此处报错
    case int:
      fmt.Println("int")
    case string:
      fmt.Println("string")
  }
}

七。切片和数组细节

func test(i...int){
  i[0]=18
}
func mian(){
  a:=[]int{1,2,3}
  test(a...)
  fmt.println(a[0])
  //输出结果为,A. 1  B. 18   C.Compilation error
}

八。 数组比较

func main(){
  a:=[2]int{1,2}
  b:=[3]int{1,2}
  fmt.println(a==b)
}
上一篇 下一篇

猜你喜欢

热点阅读