PHP转Go系列 | 数组切片的使用姿势

大家好,我是码农先森。

简介

在 PHP 语言中数组的使用很简单,易用程度简直变态,无论多么复杂的数据格式都可以用数组来表达,可以随心所欲的使用。

<?php
$array = [1, 'name', ['sex' => '男']];
print_r($array);

$array = [];
$array[0] = 'name';
$array[1] = 1;
print_r($array);

在 Go 语言中数组是一段固定长度的连续内存区域,在声明数组时,要先确定数组的长度,而且数组中的元素只能使用一种类型。

package main

func main(){
	// [4] 代表数组长度为 4,string 是数组中元素的类型,花括号中的是数组元素
	array1 := [4]int{"a", "b", "c", "d"}
	fmt.Print(array1)

	// 用 ... 方法来省略掉中括号的数值,编译器会自动确定数组中的元素。
	array2 := [...]string{"a", "b", "c", "d"}
	fmt.Print(array2)
}

遍历

在 PHP 语言中通过 foreach 进行遍历。

<?php
$array = ["a", "b", "c", "d"];
foreach($array as $k => $v) {
    echo $v;
}

在 Go 语言中通过 range 进行遍历。其中 “_” 来代替掉原来的变量 k,它指的是把当前赋的值忽略,不然编译会报错误。

package main

import (
	"fmt"
)

func main(){
    array := [...]string{"a", "b", "c", "d"}
    for _, v := range array {
        fmt.Print(v)
    }
}

截取

在 PHP 语言中对数组截取使用 array_slice 函数即可。

<?php
// 从数组的第二个元素开始,截取两个元素
$array = ["a", "b", "c", "d"];
print_r(array_slice($array, 1, 2));

在 Go 语言中可以直接取出第二到第四个元素之间的数据。

package main

import (
	"fmt"
)

func main(){
    array := [...]string{"a", "b", "c", "d"}
    fmt.Print(array[1:3])
}

追加

在 PHP 语言中为数组添加一个新元素,使用 array_push 函数即可。

<?php

$array = ["a", "b", "c", "d"];
array_push($array, 6);
print_r($array);

在 Go 中语言中使用 append 函数,这里实际上是对切片的添加操作,而不是数组。

package main

import (
	"fmt"
)

func main(){
    array := []string{"a", "b", "c", "d"}
    array = append(array, 6)
    fmt.Print(array)
}

删除

在 PHP 语言中删除数组元素非常简单,直接使用 unset 函数即可。

<?php
$array = ["a", "b", "c", "d"];
unset($array[1]);
print_r($array);

在 Go 语言中没有提供原生的删除方法,只能利用切片的特性,截取部分的切片来实现删除的操作,这种方式使用起来比较蹩脚。

package main

import (
	"fmt"
)

func main(){
    index := 1
    array := []string{"a", "b", "c", "d"}
    array = append(array[:index], array[index+1:]...)
    fmt.Print(array)
}

合并

在 PHP 语言中可以使用 array_merge 函数来合并数组。

<?php
$array1 = ["a", "b"];
$array2 = ["c", "d"];
$result = array_merge($array1, $array2);
print_r($result);

在 Go 语言中要合并两个切片,可以使用 append 函数。

package main

import "fmt"

func main() {
    array1 := []string{"a", "b"}
    array2 := []string{"c", "d"}
    result := append(array1, array2...)
    fmt.Print(result) 
}

总结

对于长期写 PHP 的朋友来说,习惯了随性所欲的使用数组。转到 Go 语言之后会被强类型所困扰,使用数组之前都需要先确定类型,在大多数的情况下还会使用到切片的特性。因此在实际的编程中需要多注意数组、切片的特性,避免出错。

推荐

PHP 语言中的函数是如此强大、丰富、便利,PHP 程序员转到 Go 语言来,发现很多方法都需要自己封装,很不适应。因此给大家推荐一个很好网站,可以直接通过 PHP 语言中的函数找到对应在 Go 语言中的函数,这简直是转 Go 语言 PHP 程序员的福音,网站地址:https://www.php2golang.com/


欢迎关注、分享、点赞、收藏、在看,我是码农先森。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值