第二天:PHP 开发者快速掌握 Go 变量与数据类型

yvsm5个月前Go语言5450

作为PHP开发者,你早已习惯了“无需声明类型、变量随用随定义”的弱类型特性,而Go作为强类型语言,变量必须显式声明类型(或通过推导确定)。今天我们就以PHP的变量/数据类型为参照,快速掌握Go的变量声明和数据类型体系。

一、Go变量声明(对标PHP变量定义)

PHP中定义变量只需加$符号,无需指定类型:$name = "PHP开发者";,而Go的变量声明有3种核心方式,我们逐一拆解:

1. 标准声明(显式指定类型)

语法:var 变量名 类型 = 值,是Go最基础的变量声明方式,对标PHP的$变量名 = 值,但多了类型约束。

// Go标准变量声明
var name string = "PHP转Go开发者"
var age int = 30
var isStudy bool = true

对比PHP写法:

// PHP变量声明(无类型约束)
$name = "PHP转Go开发者";
$age = 30;
$isStudy = true;

2. 类型推导(简化声明)

Go支持根据赋值自动推导变量类型,省去手动写类型的步骤,更贴近PHP的使用习惯:

// Go类型推导(无需写类型)
var name = "PHP转Go开发者"  // 自动推导为string类型
var age = 30                // 自动推导为int类型

⚠️ 注意:类型推导仅在声明时赋值有效,若只声明不赋值,必须指定类型(如var age int),而PHP无需此约束。

3. 短变量声明(最常用)

在函数内可使用:=简化声明,是Go开发中最常用的变量定义方式,对标PHP的$变量名 = 值

// Go短变量声明(仅函数内可用)
func main() {
    name := "PHP转Go开发者"  // 等价于 var name string = "PHP转Go开发者"
    age := 30
    fmt.Println(name, age)
}

对比PHP:

// PHP函数内变量声明
function main() {
    $name = "PHP转Go开发者";
    $age = 30;
    echo $name . ' ' . $age;
}

二、Go数据类型体系(对标PHP数据类型)

PHP的数据类型分为标量(字符串、数值、布尔)、复合(数组、对象)、特殊(null、资源),Go的类型体系更严谨,我们按“对标PHP”的逻辑分类讲解:

1. 基本数据类型(对标PHP标量类型)

Go基本类型PHP对应类型示例(Go)示例(PHP)
string(字符串)stringvar str string = "Go语言"$str = "Go语言";
int/int8/int16/int32/int64(整型)int/integervar num int64 = 100$num = 100;
float32/float64(浮点型)float/doublevar pi float64 = 3.1415$pi = 3.1415;
bool(布尔型)boolvar flag bool = false$flag = false;

💡 关键差异:
   - PHP的整型无长度限制,Go的整型分不同长度(如int8占1字节、int64占8字节),适配不同内存场景;
   - Go的字符串是不可变的,而PHP字符串可直接修改(如$str[0] = 'G')。

2. 复合数据类型(对标PHP数组/对象)

PHP的数组是“万能数组”(可存任意类型、索引/关联),Go将复合类型拆分为更精准的类型:

Go复合类型PHP对应类型核心区别
数组(array)索引数组Go数组长度固定、元素类型统一;PHP数组长度可变、类型不限
切片(slice)动态索引数组Go切片是可变长度数组,替代PHP的动态索引数组
映射(map)关联数组Go map是键值对集合,键/值类型需统一;PHP关联数组无此约束
结构体(struct)对象/数组组合Go struct用于封装多个不同类型字段,对标PHP的自定义对象

简单示例(Go map对标PHP关联数组):

// Go map(关联数组)
func main() {
    // 声明并初始化map,键为string,值为int
    user := map[string]int{
        "age":  30,
        "score": 95,
    }
    fmt.Println(user["age"]) // 输出30
}

PHP对应写法:

// PHP关联数组
$user = [
    "age" => 30,
    "score" => 95,
];
echo $user["age"]; // 输出30

3. 特殊数据类型

Go的特殊类型与PHP差异较大,暂做基础认知:

  • nil:Go的空值,仅适用于指针、切片、map等类型,对标PHP的null,但Go中nil不能赋值给int/string等基本类型;

  • 指针(pointer):存储变量内存地址,PHP无直接对应概念(PHP的引用是浅拷贝)。

三、PHP与Go变量/类型核心差异实战

通过一个小案例,对比两者的写法差异,加深理解:

需求:定义用户信息变量,输出姓名和年龄

PHP写法(弱类型):


Go写法(强类型):

package main

import "fmt"

func main() {
    // 强类型约束,类型不可随意修改
    username := "张三"
    var age string = "30"
    // Go需显式转换类型(不能自动转换)
    ageInt, _ := strconv.Atoi(age) 
    fmt.Printf("姓名:%s,年龄:%d\n", username, ageInt)
}

⚠️ 核心区别:Go不支持自动类型转换(如字符串"30"不能直接当int用),必须显式转换;PHP则会自动隐式转换。

五、今日小结

今天我们以PHP变量/数据类型为参照,掌握了Go的3种变量声明方式、数据类型体系,核心要点:

  1. Go是强类型语言,变量声明需指定/推导类型,不可随意修改类型;

  2. Go的数组/切片/map对应PHP的索引/关联数组,但类型约束更严格;

  3. 短变量声明:=是Go函数内最常用的变量定义方式,贴近PHP使用习惯。

明天我们将学习Go的运算符与流程控制,继续用PHP的if/for/foreach等语法类比,快速掌握Go的流程控制逻辑。

标签: PHP转Go

相关文章

第四天:PHP 开发者快速掌握 Go 函数

作为PHP开发者,你早已熟悉function定义函数、参数传值/传引用、return返回结果的逻辑。Go的函数体系更严谨、功能更丰富——支持多返回值、命名返回值、可变参数,且函数本身可作为参数/返回值...

第八天:PHP开发者快速掌握Go并发编程 | Goroutine与Channel从入门到实战

作为PHP开发者,你知道实现并发需要依赖pcntl扩展创建多进程、pthreads扩展实现多线程,或借助Swoole/Workerman框架——步骤繁琐且资源消耗高。而Go内置原生并发支持:Gorou...

第五天:PHP开发者快速掌握Go数组、切片与Map | 从PHP数组到Go复合类型的转换

作为PHP开发者,你早已习惯了“万能数组”——既可以当索引数组用,也可以当关联数组用,长度动态变化、元素类型不限。而Go没有“万能数组”,而是将复合数据类型拆分为数组(array)、切...

第七天:PHP开发者快速掌握Go错误处理与文件操作 | 从PHP异常/文件函数到Go实战

作为PHP开发者,你熟悉用try/catch处理异常、file_get_contents/file_put_contents读写文件、mkdir创建目录。Go没有“异常(Exception)”的概念,...

第三天:PHP 开发者快速掌握 Go 运算符与流程控制

作为PHP开发者,你早已熟悉if/else、for、foreach等流程控制语法,以及+/-/*/、==/===等运算符。Go的运算符和流程控制语法与PHP高度相似,但也有不少“细节差异”——比如Go...

第一天:从PHP到Golang,零基础入门的环境搭建与第一个程序

作为一名PHP开发者,当你决定接触Golang(简称Go)时,首先会好奇它和熟悉的PHP有哪些差异,以及如何快速迈出第一步。今天我们就从环境搭建和第一个Go程序入手,用PHP开发者熟悉的思维来解锁Go...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。