Golang中使用结构体切片指针的方法
本文将讲诉如何在Golang中生成结构体切片,并通过函数以指针的形式返回;以及如何使用这个结构体切片指针。
首先,我们定义一个简单的结构体:
type Test struct {
Value int
}
我们希望通过一个函数生成一个结构体切片,并返回;
那么,我们需要声明这样一个结构体切片,并初始化它,方法有很多,我这里介绍比较常用的两种;
在函数体内声明时,我们可以直接使用 := ,
slice := make([]Test,0)
这段代码等同于:
var slice []Test
slice = make([]Test,0)
这两种方式是有一些区别的,:= 这种不能用在函数体外,也就是说,当你想声明一个公共变量时,你只能使用第二种方法。
还有一种方法,以指针的形式进行声明:
var slice *[]Test
受C语言影响,这种方法是我最喜欢的一种,当然了,到底用不用指针完全取决使用场景,下面我将介绍在函数中以指针的形式返回结构体切片;
我们定义一个函数:
func buildStruct(count int)*[]Test{
}
这段代码中,明确定义了函数名,使用了一个count的int参数,返回一个 *[]Test,也就是结构体切片指针,当然了,这里你也可以直接返回结构体切片,而不是指针,只需把 * 号去掉,但返回时会有一些细微的区别,下面会讲到的,我们继续;
我们在该函数中加入以下代码:
func buildStruct(count int)*[]Test{
slice := make([]Test,0)
for i:=0;i<count;i++ {
t := Test{Value:i}
slice = append(slice,t)
}
return &slice
}
第3行上面我们讲过了,这里我们看第6行和第7行;
这两行实际上就是声明和初始化结构体,再通过 append 函数将结构体添加到结构体切片中去;
第9行则返回结构体切片的指针,如果你定义的返回值不是指针,则直接将结构体切片返回即可。
下面给出整个程序的完整代码:
package main
import (
"fmt"
)
type Test struct {
Value int
}
func buildStruct(count int)*[]Test{
slice := make([]Test,0)
for i:=0;i<count;i++ {
t := Test{Value:i}
slice = append(slice,t)
}
return &slice
}
func main(){
slice := buildStruct(100)
for _,v := range *slice{ //range 切片指针的正确方法
//k为索引号,v为结构体
fmt.Println(v.Value) //访问结构体的Value
}
}