字符串的赋值

在PHP中,字符串的赋值虽然只有一行,其实包含了两步,一是声明变量,二是赋值给变量,同一个变量可以任意重新赋值。

$str = 'Hello World!';
$str = 'hia';

Go语言实现上述两步也可以用一行语句解决,就是通过标识var赋值时同时声明变量,切记等号右侧的字符串不能用单引号,对变量的后续赋值也不能再重新声明,否则会报错。除此之外,定义的变量不使用也会报错,从这点来看,Go还是比PHP严格很多的,规避了很多在开发阶段产生的性能问题。

var str = "Hello World!"
str = "hia"

关于声明,Go提供了一种简化方式,不需要在行首写var,只需将等号左侧加上一个冒号就好了,切记这只是替代了声明语句,它并不会像PHP那样用一个赋值符号来统一所有的赋值操作。

str := "Hello World!"
str = "hia"

字符串的输出

PHP中的输出非常简单,一个echo就搞定了。

<?php
echo 'Hello World!';
?>

而Go不一样的是,调用它的输出函数前需要先引入包fmt,这个包提供了非常全面的输入输出函数,如果只是输出普通字符串,那么和PHP对标的函数就是Print了,从这点来看,Go更有一种万物皆对象的感觉。

import "fmt"

func main() {
fmt.Print("Hello world!")
}

在PHP中还有一个格式化输出函数sprintf,可以用占位符替换字符串。

echo sprintf('name:%s', '平也');  //name:平也

在Go中也有同名同功能的字符串格式化函数。

fmt.Print(fmt.Sprintf("name:%s", "平也"))

官方提供的默认占位符有以下几种,感兴趣的同学可以自行了解。

bool:                    %t
int, int8 etc.: %d
uint, uint8 etc.: %d, %#x if printed with %#v
float32, complex64, etc: %g
string: %s
chan: %p
pointer: %p

字符串的相关操作

字符串长度

在PHP中通过strlen计算字符串长度。

echo strlen('平也');  //output: 6

在Go中也有类似函数len

fmt.Print(len("平也"))   //output: 6

因为统计的是ASCII字符个数或字节长度,所以两个汉字被认定为长度6,如果要统计汉字的数量,可以使用如下方法,但要先引入unicode/utf8包。

import (
"fmt"
"unicode/utf8"
) func main() {
fmt.Print(utf8.RuneCountInString("平也")) //output: 2
}

字符串截取

PHP有一个substr函数用来截取任意一段字符串。

echo substr('hello,world', 0, 3); //output: hel

Go中的写法有些特别,它是将字符串当做数组,截取其中的某段字符,比较麻烦的是,在PHP中可以将第二个参数设置为负数进行反向取值,但是Go无法做到。

str := "hello,world"
fmt.Print(str[0:3]) //output: hel

字符串搜索

PHP中使用strpos查询某个字符串出现的位置。

echo strpos('hello,world', 'l'); //output: 2

Go中需要先引入strings包,再调用Index函数来实现。

fmt.Print(strings.Index("hello,world", "l")) //output: 2

字符串替换

PHP中替换字符串使用str_replace内置函数。

echo str_replace('world', 'girl', 'hello,world'); //output: hello,girl

Go中依然需要使用strings包中的函数Replace,不同的是,第四个参数是必填的,它代表替换的次数,可以为0,代表不替换,但没什么意义。还有就是字符串在PHP中放在第三个参数,在Go中是第一个参数。

fmt.Print(strings.Replace("hello,world", "world", "girl", 1)) //output: hello,girl

字符串连接

在PHP中最经典的就是用点来连接字符串。

echo 'hello' . ',' . 'world'; //output: hello,world

在Go中用加号来连接字符串。

fmt.Print("hello" + "," + "world") //output: hello,world

除此之外,还可以使用strings包中的Join函数连接,这种写法非常类似与PHP中的数组拼接字符串函数implode

str := []string{"hello", "world"}
fmt.Print(strings.Join(str, ",")) //output: hello,world

字符串编码

PHP中使用内置函数base64_encode来进行编码。

echo base64_encode('hello, world'); //output: aGVsbG8sIHdvcmxk

在Go中要先引入encoding/base64包,并定义一个切片,再通过StdEncoding.EncodeToString函数对切片编码,比PHP要复杂一些。

import (
"encoding/base64"
"fmt"
) func main() {
str := []byte("hello, world")
fmt.Print(base64.StdEncoding.EncodeToString(str))
}

以上是PHP与Go在常用的字符串处理场景中的区别,感兴趣的同学可以自行了解。

PHP转Go系列:字符串的更多相关文章

  1. str系列---字符串函数

    1. strcat extern char *strcat(char *dest,char *src); 把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'. 返回指 ...

  2. impala系列: 字符串函数

    --=======================常用字符串函数--=======================base64decode(string str) : base64 解码.base64 ...

  3. C开发系列-字符串

    C语言字符串 C语言字符串本质是使用字符数组来存储的. #include <stdio.h> int main() { "jake"; // "jake&qu ...

  4. sql 语句系列(字符串的遍历嵌入删除与统计)[八百章之第十一章]

    遍历字符串 我觉得首先要提出一个疑问: 一个数据库本身就是用于存储的,遍历字符串究竟有何意义? 先看如何实现的,毕竟sql service 是没有for循环,也没有loop和while的. selec ...

  5. 重复造轮子系列--字符串处理(C语言)

    这些字符代码是以前写的,源于很久很久以前的一个VC++项目,在当时的部门编程比赛里因为用了项目代码的xsplit函数,万万没想到,那个做了几年的项目里面居然有坑..xsplit函数居然不能split连 ...

  6. Numpy 系列(十一)- genfromtxt函数

    定义输入 genfromtxt的唯一强制参数是数据的源.它可以是字符串,字符串列表或生成器.如果提供了单个字符串,则假定它是本地或远程文件或具有read方法的打开的类文件对象的名称,例如文件或Stri ...

  7. python中字符串(str)常用操作总结

    # 字符串的常用操作方法 (都是形成新的字符串,与原字符串没有关系.) 1.字符串的基本操作之切片 s = 'python hello word' # 取首不取尾,取尾要+1 # 切片取出来的字符串与 ...

  8. C语言 宽字符串

    /* 宽字符串的打印 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include ...

  9. python字符串列表元组序列操作

    Table of Contents generated with DocToc python系列-字符串.列表.元组的操作 序列的访问及运算符 序列通用操作 访问单个元素 切片访问一部分元素 序列的复 ...

  10. 学习MySQL之数据类型(四)

    一.   整数类型: 整数类型 占用字节 最小值 最大值 TINYINT 1 有符号 -128 无符号0 有符号127 无符号255 SMALLINT 2 有符号-3 2768 无符号0 有符号3 2 ...

随机推荐

  1. 团队项目之团队展示&选题

    团队博文:https://www.cnblogs.com/blackpanda/p/11734448.html 一. 团队展示 1.  队名: Black Panda 2.  队员: 郑伟金 3117 ...

  2. 好用的性能检测工具-性能监控工具- Glances

    平常我经常使用 htop 工具来进行对主机进行性能检测.但是它只能对 进行进行管理.并简要显示 进程和cpu和内存使用信息:性能监控工具: glances 是比较好的性能检测工具.相比较htop还能显 ...

  3. Educational Codeforces Round 71 (Rated for Div. 2)

    传送门 A.There Are Two Types Of Burgers 签到. B.Square Filling 签到 C.Gas Pipeline 每个位置只有"高.低"两种状 ...

  4. 【攻防世界】高手进阶 pwn200 WP

    题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...

  5. RNN及其变体框架

    RNN及其变体框架  含RNN推导 LSTM理解 理解LSTM网络  算法细节理解及参考文献  

  6. 洛谷 P4017 最大食物链计数

    洛谷 P4017 最大食物链计数 洛谷传送门 题目背景 你知道食物链吗?Delia生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条.于是她来就来求助你,然而你也不会啊!写 ...

  7. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于Wi-Fi模块AT指令TCP透传方式,MQTT通信控制升级(含有数据校验)-APP用户程序制作过程

    前言 这一节和上一节是搭配的 给大家鱼,也必须给鱼竿! 我期望自己封装的代码,无论过了多少年都有应用的价值! 这节说明一下制作APP用户程序的过程 咱是用MQTT通信控制模块实现升级,所以首先自己的程 ...

  8. 【UOJ276】【清华集训2016】汽水(分数规划+点分治)

    点此看题面 大致题意: 给你一棵树,要求你选择一条树上路径,使得这条路径上边权的平均值与定值\(k\)的差的绝对值最小.求出这个最小值. 分数规划 看到平均值,首先就应该想到分数规划吧. 我们二分答案 ...

  9. 用 Python 批量下载百度图片

    ​ 为了做一个图像分类的小项目,需要制作自己的数据集.要想制作数据集,就得从网上下载大量的图片,再统一处理. 这时,一张张的保存下载,就显得很繁琐.那么,有没有一种方法可以把搜索到的图片直接下载到本地 ...

  10. 由浅入深,讲解 spring 实战详细使用——spring 源码篇

    首先,这篇文章不会详细的深入底层源码,只是基于注解和配置来说说我们的 spring 的使用,别小看基础,保证有你没用过的注解和配置,走起. 我们先来建立一个 maven 项目,引入 spring 文件 ...