Go 使用过程中的错误

切片和结构体的声明

  • 切片的扩容,只有使用 append 的时候管用

  • 指针如果没有声明指向哪里,那么就是 nil

  • 结构体使用 type M struct , 匿名结构体使用var M struct { } 来声明

  • 报错infinite recursive call 无限递归调用

  • map 不需要使用数组类型的申明,见下面代码段1 ,结构题数组的声明使用 下面代码段 2

## map代码 1
func main() {
	m := map[string]int{
		"小刘": 12,
		"小王": 15,
	}
	for k, v := range m {
		fmt.Println(k, v)
	}
}
## 结构体代码 2
  stus := []student{
        {name: "pprof.cn", age: 18},
        {name: "测试", age: 23},
        {name: "博客", age: 28},
    }

go的 ...用法

Go 语言里的 ... 是有两种用法,一个是在字符串前边,一个是在字符串后边。

  • 在前边表示参数不确定
  • 在后边表示将切片打碎了传进去
func test1(args ...string) { //可以接受任意个string参数
    for _, v:= range args{
        fmt.Println(v)
    }
}

func main(){
var strss= []string{
        "qwr",
        "234",
        "yui",
        "cvbc",
    }
    test1(strss...) //切片被打散传入
}

结构体

结构体的声明是要使用键值对

func newAGraph(n int) *AGraph {
	adjList := make([]VNode, n)
	return &AGraph{
		n:       n,       // 结构体是使用键值对的方式来声明的
		e:       0,       //边数为0
		adjList: adjList, // 链表
	}
}

匿名结构体的声明,是在方法内部声明,直接把 type 更改成 var

func main() {
    var user struct{Name string; Age int}
    user.Name = "pprof.cn"
    user.Age = 18
    fmt.Printf("%#v\n", user)
}

当结构体内的东西需要修改的时候,或者结构体内的东西比较大的时候,使用指针类型的结构体

结构体使用 new 声明。

类型转换

显示类型转换

这种类型转换主要在切换同一基础类型不同精度范围时使用,比如我们要将 int 型转为 int64 类型时。类型被转换后是否会损失精度的问题,如果损失了精度是否会影响接下来的业务流程。

	a := 1.52
	b:=int(a)

断言

断言,顾名思义就是果断的去猜测一个未知的事物。其断言操作就是用来判断 interface{} 的类型。

	var f interface{} = 25
	c := f.(int)

参考文献

https://zhuanlan.zhihu.com/p/30453711

Go 使用过程中的错误

上一篇:LAMP


下一篇:ASP.NET MVC路由(五)