【Go入門】Goの基本型 – 文字列型(String types)

Go
スポンサーリンク

ここまで、Goの基本型として数値型論理値型とみてきました。

ここでは、文字列型(String types)について見て行きます。

スポンサーリンク

文字列型

文字列型は文字列値のセットです。個々の文字にアクセスして操作することができます。

文字列はstring型で、ダブルクォートで囲んで次のように宣言します。

var x string = "golang"
var x = "golang"
x := "golang"

これら3つは、同じ意味を示しています。

文字列型を操作するコードをいくつか書いてみましょう。

package main

import "fmt"

func main() {
	fmt.Println("Hello Golang")
	fmt.Println("Hello " + "Golang")
	// var s string = "Go Programming"
	s := "Go Programming"
	fmt.Println(s)
	fmt.Printf("%T\n", s)
	fmt.Println(s[0]) 
	fmt.Println(string(s[0]))

	bs := []byte(s)
	fmt.Println(bs)
	fmt.Printf("%T\n", bs)

	for i := 0; i < len(s); i++ {
		fmt.Printf("%#U\n", s[i])
	}

	for i, v := range s {
		fmt.Printf("index %d : %#x\n", i, v)
	}

}

Println()で出力していますが、最初の2つ目のように、ダブルクォートで囲んだものを「+」で連結することもできます。

s[0]で最初の文字列を取り出して操作しています。

[]byte()で、それぞれの文字列のアスキーコードの配列に格納することができます。

for文を使ってループ処理でそれぞれの文字列を取り出して処理していますが、詳しいことはまた別のところでやるとして、%#Uを使っているところはUnicodeフォーマットで、%dは整数、%#xは16進数で表示するフォーマット出力の処理です。これらの値を取り出す処理をしています。

このあたりのフォーマットの分類は、ドキュメントのfmtのところにあります。

fmt - The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

実行結果はこう出力されます。

Hello Golang
Hello Golang
Go Programming
string
71
G
[71 111 32 80 114 111 103 114 97 109 109 105 110 103]
[]uint8
U+0047 'G'
U+006F 'o'
U+0020 ' '
U+0050 'P'
U+0072 'r'
U+006F 'o'
U+0067 'g'
U+0072 'r'
U+0061 'a'
U+006D 'm'
U+006D 'm'
U+0069 'i'
U+006E 'n'
U+0067 'g'
index 0 : 0x47
index 1 : 0x6f
index 2 : 0x20
index 3 : 0x50
index 4 : 0x72
index 5 : 0x6f
index 6 : 0x67
index 7 : 0x72
index 8 : 0x61
index 9 : 0x6d
index 10 : 0x6d
index 11 : 0x69
index 12 : 0x6e
index 13 : 0x67

あえて、説明を省略していた部分があります。

s[0]で出力したところは、最初の文字列の「G」ではなく「71」のアスキーコードで出力されているのがわかると思います。

これをキャストするために次の行のコードでstring(s[0])として「G」を出力しています。

%#U、%#xは、%U、%xでもそれぞれUnicode、16進数として表示されますが、#をつけることでGoの構文として表示することができます。取り除いて出力してみると違いがわかると思います。

文字列の出力で、文章の途中で改行したい場合は次のような方法があります。

package main

import "fmt"

func main() {
	fmt.Println("プログラミング言語では、\nGoよりもPythonが好きです。")
	fmt.Println(`プログラミング言語では、
GoよりもPythonが好きです。`)

}

ひとつめは、\nの改行コードを文章の途中に入れる場合です。もうひとつはバッククォート(“)を使います。これで囲まれた文章は、実際にコードを改行して書くことができます。

プログラミング言語では、
GoよりもPythonが好きです。
プログラミング言語では、
åGoよりもPythonが好きです。

どちらも同じように表示できました。ちなみに、ほんとにPythonの方が好きです(笑)

スポンサーリンク

strings パッケージ

文字列のいろいろな操作をするには、stringsパッケージをimportする必要があります。

と言っても、メソッドを利用する時に、VScodeではファイルの保存で追記されると思いますが。

imprt文に続けて、”strings”と記述して利用します。

パッケージのドキュメントにstringsの一覧があります。

strings - The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

全て触れるわけには行きませんが、いくつか次のコードで使ってみましょう。

package main

import (
	"fmt"
	"strings"
)

func main() {
	s := "go programming"
	fmt.Println(s)
	fmt.Println(strings.Contains(s, "gra"))
	fmt.Println(strings.ToUpper(s))
	fmt.Println(strings.ToLower(s))
	fmt.Println(strings.Title(s))
	fmt.Println(strings.Count(s, "r"))
	s = strings.Replace(s, "g", "n", 1)
	fmt.Println(s)
}

順に見て行きましょう。

import文に”strings”が追加されています。

省略宣言で、文字列を宣言しています。全て小文字にしました。

Println()の中でstringsパッケージを使っています。

最初はContainsを使って、第1引数に文字列の変数を、第2引数に調べる文字列を代入しています。この文字列が含まれてるかどうかをtrue/falseで判定します。

次のToUpperで文字列を全て大文字にしています。

逆にToLowerで文字列を全て小文字にしています。

Titleで、文字列をタイトルケースにしています。

Conuntで、第2引数に入れた文字列が含まれる数をカウントしています。

Replaceで、第1引数の文字列の中の、第2引数に入れた文字の部分を、第3引数の文字で、第4引数に入れた数だけ先頭から置き換えるという処理をしています。

実行結果は次のようになります。

go programming
true
GO PROGRAMMING
go programming
Go Programming
2
no programming

それぞれ対応した処理の結果になっているのを確認しましょう。

他にもたくさんあるので、ドキュメントの中からいろいろ試してみるといいと思います。ドキュメントには例文コードをそのまま実行して結果を見ることができるので便利です。

スポンサーリンク

Pythonコードで書くと…

では、Pythonで文字列型のコードを書いてみようと思いますが、Goとはエンコードの処理に結構仕様の違いのあるところで、説明が複雑になるのでここではその点は省略します。

def main():
    print("Hello Python")
    print("Hello " + "Python")
    s = "Python Programming"
    print(s)
    print(type(s))
    print(s[0])

    for i in s:
        print(i)


if __name__ == "__main__":
    main()

s[0]で文字列のインデックスを指定して取り出すと、Goの場合と違って文字列が出力されます。

次のように出力されます。

Hello Python
Hello Python
Python Programming
<class 'str'>
P
P
y
t
h
o
n
 
P
r
o
g
r
a
m
m
i
n
g

続いて、Goと同様の文字列の操作をしてみましょう。

同じ処理のできるコードを書いてみます。

def main():
    s = "python programming"
    print("gra" in s)
    print(s.upper())
    print(s.lower())
    print(s.title())
    print(s.count("r"))
    s = s.replace(" ", "-")
    print(s)


if __name__ == "__main__":
    main()

GoのContains以外は同じようなメソッドでの処理となります。

実行結果はこうなります。

True
PYTHON PROGRAMMING
python programming
Python Programming
2
python-programming

Pythonでの表示の改行(複数行)をやってみましょう。

Pythonでは以下の方法で表示することができます。

def main():
    print("プログラミング言語では、")
    print("本当にGoよりもPythonが好きです。")

    print("プログラミング言語では、\n本当にGoよりもPythonが好きです。")
    
    print("""プログラミング言語では、
本当にGoよりもPythonが好きです。""")


if __name__ == "__main__":
    main()

まず、print()を複数使って表示させる方法です。これはちょっと不格好ですかね?

次は、Goと同様に\nの改行コードを使って表示する方法です。

最後は、トリプルクォート(”””)で、文章を囲んで、改行する方法です。

実行結果はこうなります。

プログラミング言語では、
本当にGoよりもPythonが好きです。
プログラミング言語では、
本当にGoよりもPythonが好きです。
プログラミング言語では、
本当にGoよりもPythonが好きです。

どれも同じように改行されて表示されているのがわかります。

スポンサーリンク

最後に

ここでは、Go言語の文字列型を扱いました。

文字列はダブルクォート(””)で囲んで記述します。

fmtのドキュメントで文字のフォーマットの分類を確認しましょう。

パッケージのstringsをインポートして、文字列の操作を行います。ここでは扱わなかったメソッドがたくさんあるので、ドキュメントで確認しましょう。

Go
スポンサーリンク
CodeGraffitiをフォローする

コードグラフィティ ~ とにかく進もうプログラミング入門~
タイトルとURLをコピーしました