【文法系】【go】基本⑥:文字列型
本noteの概要
golang(以下、go)の基本的な文法と出力内容について確認する。
本noteの対象者
・goをインストール済みの方
※ 筆者は仮想環境上でgoを実行していますが、ローカル環境でも基本的に挙動は変わらないと思います、goがインストールされていれば問題ないかと。
▽ 仮想環境上でgoを動かしたい方は以下参考までに ▽
【手順系】【go】仮想環境上でのWebアプリケーション開発①:go環境構築 - This is My note
本noteの環境
PC環境(ホスト)
# OSのバージョン (base) $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.6 BuildVersion: 18G2022 # Virtualboxのバージョン (base) $ VBoxManage -v 6.1.2r135662 # vagrantのバージョン (base) $ vagrant -v Vagrant 2.2.7
仮想環境(ゲスト)
# Linuxのバージョンが記載されているファイルを検索 vagrant@:~$ ls /etc/*-release /etc/lsb-release /etc/os-release # ゲストOSのバージョンを出力 vagrant@:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"
仮想環境上のディレクトリ構成
workspace - src - test - lesson.go
現在のディレクトリ
vagrant@vagrant-ubuntu-trusty-64:~/workspace/src/test$ pwd /home/vagrant/workspace/src/test
【注】
以降、特段の記述がない限り、コマンドの実行は現在のディレクトリ(test)で行われるものとし、文字数削減のため、表記を以下に省略して記述する。
省略前:vagrant@vagrant-ubuntu-trusty-64:~/workspace/src/test$
↓
省略後:$
Today's Thema:goにおける文字列の取り扱い
1.文字の連結
package main import ( "fmt" ) func main(){ fmt.Println("Hello World!") fmt.Println("Hello " + "World!") fmt.Println("Hello", "World!") }
▼ 実行
$ go run lesson.go Hello World! Hello World! Hello World!
2.指定したインデックス番号に対応する文字の出力
package main import ( "fmt" ) func main(){ fmt.Println(string("Hello!"[0])) fmt.Println(string("Hello!"[1])) fmt.Println(string("Hello!"[2])) fmt.Println(string("Hello!"[3])) fmt.Println(string("Hello!"[4])) fmt.Println(string("Hello!"[5])) }
▼ 実行
$ go run lesson.go H e l l o !
《解説》
RubyやPythonでは[]でインデックス番号を指定するだけで、対応する文字を出力することができるが、goではインデックス番号の指定に加えて、文字列型(string)であることを明示する必要がある。
なお、文字列型(string)を指定しなかった場合には、以下のようにアスキーコード(ASCII code)が出力される。
func main(){ fmt.Println("Hello!"[0]) }
▼ 出力
72
3.文字の置換
使用例①
package main import ( "fmt" "strings" // ライブラリ(strings)のインポート ) func main(){ fmt.Println(strings.Replace("Hello", "H", "X", 1)) // 置換設定:strings.Replace("文字列" or 変数名, "変換対象の文字", "変換後の文字", 変換する回数) }
▼ 実行
$ go run lesson.go Xello
使用例②
package main import ( "fmt" "strings" ) func main(){ var s string = "Hello World" fmt.Println(strings.Replace(s, "l", "X", 2)) }
▼ 実行
$ go run lesson.go HeXXo World
《解説》
上記については、あくまで文字を置き換えて出力しただけなので、元々の変数(s)の中身は変わっていない。変数の中身自体を変更したい場合は、置換した内容を再度変数に代入する必要がある。
package main import ( "fmt" "strings" ) func main(){ var s string = "Hello World" fmt.Println(strings.Replace(s, "l", "X", 2)) fmt.Println(s) s = strings.Replace(s, "l", "X", 2) fmt.Println(s) }
▼ 実行
$ go run lesson.go HeXXo World Hello World HeXXo World
4.特定の文字を含むかどうかの確認
package main import ( "fmt" "strings" ) func main(){ var s string = "Hello World" fmt.Println(strings.Contains(s, "World")) }
▼ 実行
$ go run lesson.go true
5.文字の繰り返し
package main import ( "fmt" "strings" ) func main(){ fmt.Println(strings.Repeat("*", 20)) fmt.Println("Hello World") fmt.Println(strings.Repeat("*", 20)) }
▼ 実行
$ go run lesson.go ******************** Hello World ********************
《解説》
RubyやPythonでは乗算の演算子(*)を使って「"文字列"*出力回数」と書くことができるが、goでは使えないので注意。goでは「strings.Repeat("文字列" or 変数名, 出力回数)」とする必要がある。
6.文字列の改行
使用例①:改行箇所に「\n」をつける
package main import ( "fmt" ) func main(){ fmt.Println("Hello\n" + "World") }
▼ 実行
$ go run lesson.go Hello World
使用例②:`(バッククォート)で囲む
※``で囲んだ場合、コード内の位置のまま出力される
package main import ( "fmt" ) func main(){ fmt.Println(`Hello World Hello Tsubasa `) }
▼ 実行
$ go run lesson.go Hello World Hello Tsubasa
7.その他
特殊文字("(ダブルクォーテーション)など)の出力
package main import ( "fmt" ) func main(){ fmt.Println("\"") // \(バックスラッシュ)をつける fmt.Println(`"`) // `(バッククォート)で囲む }
▼ 実行
$ go run lesson.go " "