字符串的赋值

在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. JavaWeb开发——软件国际化(动态元素国际化)

    软件国际化的第二个部分,就是动态元素国际化. 数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理.Java 中提供了解决这些 ...

  2. Spring Boot 2 配置服务器访问日志

    Tomcat控制台中看到的日志是服务器的日志,而服务器访问日志则是记录服务处理的请求信息. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 1.新建一个名 ...

  3. android binder 进程间通信机制5-Service注册和代理对象的获取

    ServiceManager,其实也是一个Service,不过它的Server端实现并未使用Binder库的结构实现,而是直接打开binder/dev进行通信的,不具有普遍性. 下面以MediaSer ...

  4. apache配置文件说明及一些指令

    httpd命令和apachectl命令 [root@localhost ~]# httpd -h Usage: httpd [-D name] [-d directory] [-f file] [-C ...

  5. 移动端px自动转化为rem

    注:不转换的px用大写PX代替 lib-flexible 作用:让网页根据设备dpr和宽度,利用viewport和html根元素的font-size配合rem来适配不同尺寸的移动端设备 安装:cnpm ...

  6. 腾讯云服务器centos7.2+nginx(开启gzip压缩)+uwsgi+Django+react

    因为项目原因,学习了react,Django,完成react开发项目过后,打包(做好了代码分割.压缩)放入Django中,在本地运行速度很快,结果放到服务器中,虽然某些js文件很小(只有一百多kb), ...

  7. 说说 Vue.js 中的 v-cloak 指令

    可以使用 v-cloak 指令设置样式,这些样式会在 Vue 实例编译结束时,从绑定的 HTML 元素上被移除. 当网络较慢,网页还在加载 Vue.js ,而导致 Vue 来不及渲染,这时页面就会显示 ...

  8. 还在担心网聊相亲的小姐姐,美女变恐龙!Python帮你"潜伏"侦查

    ​ 最近,小编的一个朋友很是苦恼,他在Python交流的群里,认识了一个妹子,看头像感觉挺不错的,大家都喜欢摄影,蛮谈得来的!但是想要约见面却不敢,因为他看过<头号玩家>,深知躲在电脑背后 ...

  9. python的__future__模块

    一.概述 Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动.有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了.从Python 2.7到P ...

  10. 转载-Java中LinkedList的一些方法—addFirst addFirst getFirst geLast removeFirst removeLast

    Java中LinkedList的一些方法—addFirst addFirst getFirst geLast removeFirst removeLast 版权声明:本文为博主原创文章,遵循CC 4. ...