目录
切片和结构体的声明
-
切片的扩容,只有使用
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)