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
	}
}

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/golang-struct-slice-pointer.html

分类: 计算机技术
推荐阅读:
C语言实现矩阵乘法 本文将使用C语言实现矩阵乘法;分别生成阶为m*n和p*q的两个矩阵,以得到阶为m*q的结果矩阵,其中n等于p。
Linux查看经常使用的命令 在Linux系统下,如果你想查看你常常使用的命令,那你运行一条命令即可实现:
Rust中的Fn、FnOnce、FnMut闭包详解 闭包会自动实现Fn、FnOnce、FnMut这三个trait中的任意一个,这取决于闭包在调用过程中对捕获变量的使用;
Rust assert宏的用法和示例 在 Rust 中,assert宏用于在运行时检查条件是否满足;条件为true时,程序会正常执行,不会发生任何错误或中断,条件为false时,程序会panic,并在控制台输出相应的错误消息;
Rust while 条件循环 Rust 内置了while循环结构;当条件为真时,执行循环,当条件不为真时,停止循环;
使用Session实例让requests保持会话 Session对象能让你跨请求保持某些参数;最长常见的是,当你使用requests尝试登录并且验证成功,服务端会返回一些Cookie,这些Cookie可以使你的下次请求不需要验证,而Session对象能保持这些Cookie,而不用你每次提交请求时构建一个新的Cookie。