PHP轉Go系列之字符串

字符串的賦值

在PHP中,字符串的賦值雖然只有一行,其實包含了兩步,一是聲明變量,二是賦值給變量,同一個變量能夠任意從新賦值。php

$str = 'Hello World!';
$str = 'hia';
複製代碼

Go語言實現上述兩步也能夠用一行語句解決,就是經過標識var賦值時同時聲明變量,切記等號右側的字符串不能用單引號,對變量的後續賦值也不能再從新聲明,不然會報錯。除此以外,定義的變量不使用也會報錯,從這點來看,Go仍是比PHP嚴格不少的,規避了不少在開發階段產生的性能問題。數組

var str = "Hello World!"
str = "hia"
複製代碼

關於聲明,Go提供了一種簡化方式,不須要在行首寫var,只需將等號左側加上一個冒號就行了,切記這只是替代了聲明語句,它並不會像PHP那樣用一個賦值符號來統一全部的賦值操做。bash

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,能夠用佔位符替換字符串。ui

echo sprintf('name:%s', '平也');  //name:平也
複製代碼

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

fmt.Print(fmt.Sprintf("name:%s", "平也"))
複製代碼

官方提供的默認佔位符有如下幾種,感興趣的同窗能夠自行了解。spa

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計算字符串長度。code

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在經常使用的字符串處理場景中的區別,感興趣的同窗能夠自行了解。

相關文章
相關標籤/搜索