前書き

Goでは、データタイプを使用して特定のタイプのデータを分類し、そのタイプに割り当てることができる値と、そのデータに対して実行できる操作を決定します。 プログラミングするとき、値を異なる方法で操作するために、型間で値を変換する必要がある場合があります。 たとえば、数値を文字列と連結したり、整数値として初期化された数値の小数点以下の桁を表す必要がある場合があります。 多くの場合、ユーザー生成データには、数字で構成されている場合でも、文字列データ型が自動的に割り当てられます。この入力で数学演算を実行するには、文字列を数値データ型に変換する必要があります。

Goは静的に型付けされた言語であるため、https://www.digitalocean.com/community/tutorials/understanding-data-types-in-go#declaring-data-types-for-variables [データ型は変数にバインドされています]値より。 これは、変数を `+ int `として定義する場合、 ` int `にしかできないことを意味します。変数のデータ型を変換せずに「 string +」を割り当てることはできません。 Goのデータ型の静的な性質は、データ型を変換する方法を学ぶことをさらに重要にしています。

このチュートリアルでは、数字と文字列の変換について説明するとともに、さまざまなユースケースに慣れるための例を提供します。

数値型の変換

Goにはいくつかの数値タイプがあります。 主に2つの一般的なタイプに分けられます:https://www.digitalocean.com/community/tutorials/understanding-data-types-in-go#integers[integers]およびhttps://www.digitalocean.com/community/ tutorials / understanding-data-types-in-go#floating-point-numbers [浮動小数点数]。

数値型間で変換する必要がある状況は数多くあります。 https://www.digitalocean.com/community/tutorials/understanding-data-types-in-go#sizes-of-numeric-types [数値型の異なるサイズ]間の変換は、特定の種類のシステムアーキテクチャのパフォーマンスを最適化するのに役立ちます。 。 コードの別の部分から整数を取得し、その整数で除算を行いたい場合、整数を浮動小数点数に変換して、演算の精度を維持することができます。 さらに、通常、期間の処理には整数変換が含まれます。 これらの状況に対処するために、Goにはほとんどの数値型に対して組み込みの_type conversions_があります。

整数型間の変換

Goには多くの整数データ型があります。 通常、どちらを使用するかは、https://www.digitalocean.com/community/tutorials/understanding-data-types-in-go#picking-numeric-data-types [performance]の方が重要です。ただし、ある整数型から別の整数型に変換する必要がある場合があります。 たとえば、Goは数値を `+ int `として自動的に生成することがありますが、入力値と一致しない場合があります。 入力値が「 int64 」の場合、データ型を一致するように変換するまで、同じ数式で「 int 」と「 int64 +」の数字を使用することはできません。

`+ int8 `があり、それを ` int32 `に変換する必要があると仮定します。 これを行うには、 ` int32()+`型変換でラップします。

var index int8 = 15

var bigIndex int32

bigIndex = int32(index)

fmt.Println(bigIndex)
Output15

このコードブロックは、「+ index 」を「 int8 」データ型として、「 bigIndex 」を「 int32 」データ型として定義します。 ` index `の値を ` bigIndex `に保存するには、データ型を ` int32 `に変換します。 これは、 ` index `変数の周りで ` int32()+`変換をラップすることによって行われます。

データ型を確認するには、次の構文で `+ fmt.Printf `ステートメントと `%T +`動詞を使用できます。

fmt.Printf("index data type:    %T\n", index)
fmt.Printf("bigIndex data type: %T\n", bigIndex)
Outputindex data type:    int8
bigIndex data type: int32

これは `+%T +`動詞を使用するため、printステートメントは変数の実際の値ではなく、変数の型を出力します。 これにより、変換されたデータ型を確認できます。

より大きなビットサイズの整数からより小さなビットサイズの整数に変換することもできます。

var big int64 = 64

var little int8

little = int8(big)

fmt.Println(little)
Output64

整数を変換すると、データ型とhttps://www.digitalocean.com/community/tutorials/understanding-data-types-in-go#overflow-vs-wraparound[wraparound ]:

var big int64 = 129
var little = int8(big)
fmt.Println(little)
Output-127

値を保持するには小さすぎるデータ型に値が変換されると、ラップアラウンドが発生します。 上記の例では、8ビットのデータ型「+ int8 」には、64ビット変数「 big +」を保持するのに十分なスペースがありませんでした。 誤ってデータを切り捨てないように、大きい数値のデータ型から小さい数値のデータ型に変換するときは、常に注意が必要です。

整数から浮動小数点数への変換

Goで整数を浮動小数点数に変換することは、ある整数型を別の整数型に変換することに似ています。 変換する整数を `+ float64()`または ` float32()+`で囲むことにより、組み込みの型変換を使用できます。

var x int64 = 57

var y float64 =

fmt.Printf("%.2f\n", y)
Output57.00

このコードは、タイプ「+ int64 」の変数「 x 」を宣言し、その値を「+57」に初期化します。

var x int64 = 57

`+ float64()`変換を ` x `で囲むと、 ` 57 `の値が ` 57.00 +`のfloat値に変換されます。

var y float64 = float64(x)

`%。2f +`印刷動詞は、 ` fmt.Printf +`に小数点以下2桁で浮動小数点をフォーマットするように指示します。

このプロセスを変数で使用することもできます。 次のコードは、 `+ f `を ` 57 +`と等しいものとして宣言し、新しいフロートを出力します。

var f float64 = 57
fmt.Printf("%.2f\n", f)
Output57.00

`+ float32()`または ` float64()+`を使用すると、整数を浮動小数点数に変換できます。 次に、フロートを整数に変換する方法を学びます。

浮動小数点数から整数への変換

Goは浮動小数点数を整数に変換できますが、プログラムは浮動小数点数の精度を失います。

`+ int()+`またはそのアーキテクチャに依存しないデータ型の1つでフロートをラップすることは、整数型から別の整数型に変換するためにそれを使用したときと同様に機能します。 括弧内に浮動小数点数を追加して、整数に変換できます。

var f float64 = 390.8
var i int = int(f)

fmt.Printf("f = %.2f\n", f)
fmt.Printf("i = %d\n", i)
Outputf = 390.80
i = 390

この構文は、浮動小数点の「390.8」を整数の「390」に変換し、小数点以下を切り捨てます。

これを変数とともに使用することもできます。 次のコードは、「+ b 」を「+125.0」と等しいものとして宣言し、「+ c 」を「+390.8」と等しいものとして宣言し、整数として出力します。 短い変数宣言( +:= +)は構文を短縮します:

b := 125.0
c := 390.8

fmt.Println()
fmt.Println()
Output125
390

`+ int()`タイプでフロートを整数に変換するとき、Goは整数を作成するためにフロートの小数と残りの数値を切り捨てます。 390.8を391に切り上げたい場合でも、Goはこれを ` int()+`タイプで行わないことに注意してください。 代わりに、小数をドロップします。

除算で変換された数字

Goで整数型を除算すると、結果も整数型になり、_modulus_または剰余が削除されます。

a := 5 / 2
fmt.Println(a)
Output2

分割するときに、数値型のいずれかがfloatである場合、すべての型が自動的にfloatとして宣言されます。

   a := 5.0 / 2
   fmt.Println(a)
Output2.5

これは、浮動小数点型の「5.0」を整数型の「2」で除算し、「+ 2.5+」という答えは、小数点以下の精度を保持する浮動小数点型です。

このセクションでは、異なるサイズの整数や浮動小数点数など、異なる数のデータ型間で変換しました。 次に、数字と文字列を変換する方法を学びます。

文字列を使用した変換

_string_は、1つ以上の文字(文字、数字、または記号)のシーケンスです。 文字列は、コンピュータープログラムのデータの一般的な形式であり、特にユーザー生成データを取り込む場合は、文字列を数字に変換するか、数字を文字列に変換する必要がある場合があります。

数値を文字列に変換する

Go標準ライブラリの `+ strconv `パッケージの ` strconv.Itoa +`メソッドを使用して、数値を文字列に変換できます。 メソッドの括弧に数値または変数を渡すと、その数値は文字列値に変換されます。

まず、整数の変換を見てみましょう。 整数の「12」を文字列値に変換するには、「+ 12+」を「+ strconv.Itoa +」メソッドに渡すことができます。

package main

import (
   "fmt"

)

func main() {

   fmt.Printf("%q\n", a)
}

このプログラムを実行すると、次の出力が表示されます。

Output"12"

数字12を囲む引用符は、数字が整数ではなく文字列値になったことを示します。

「:= +」代入演算子を使用して、「 a 」という名前の新しい変数を宣言し、「 strconv.Itoa()」関数から返される値を代入しました。 この場合、変数に値「+12」を割り当てました。 また、 `+ fmt.Printf `関数で `%q +`動詞を使用しました。これは、指定された文字列を引用するように関数に指示します。

変数を使用すると、整数を文字列に変換することがいかに実用的であるかを確認できます。 ユーザーの毎日のプログラミングの進捗状況を追跡し、一度に何行のコードを記述するかを入力するとします。 このフィードバックをユーザーに表示し、文字列と整数値を同時に出力します。

package main

import (
   "fmt"
)

func main() {
   user := "Sammy"
   lines := 50

   fmt.Println("Congratulations, " + user + "! You just wrote " + lines + " lines of code.")
}

このコードを実行すると、次のエラーが表示されます。

Outputinvalid operation: ("Congratulations, " + user + "! You just wrote ") + lines (mismatched types string and int)

Goで文字列と整数を連結することはできないため、変数 `+ lines +`を文字列値に変換する必要があります。

package main

import (
   "fmt"

)

func main() {
   user := "Sammy"
   lines := 50

   fmt.Println("Congratulations, " + user + "! You just wrote " +  + " lines of code.")
}

これで、コードを実行すると、ユーザーの進捗を祝福する次の出力が表示されます。

OutputCongratulations, Sammy! You just wrote 50 lines of code.

整数を文字列に変換するのではなく、フロートを文字列に変換する場合は、同様の手順と形式に従います。 Go標準ライブラリの `+ fmt `パッケージから ` fmt.Sprint +`メソッドにfloatを渡すと、floatの文字列値が返されます。 フロート値自体または変数のいずれかを使用できます。

package main

import (
   "fmt"
)

func main() {
   fmt.Println(fmt.Sprint(421.034))

   f := 5524.53
   fmt.Println(fmt.Sprint(f))
}
Output421.034
5524.53

文字列と連結することにより、正しいことを確認するためにテストできます。

package main

import (
   "fmt"
)

func main() {
   f := 5524.53
   fmt.Println("Sammy has " + fmt.Sprint(f) + " points.")
}
OutputSammy has 5524.53 points.

連結がエラーなしで実行されたため、フロートが文字列に適切に変換されたことを確認できます。

文字列を数値に変換する

Go標準ライブラリの `+ strconv `パッケージを使用して、文字列を数値に変換できます。 ` strconv `パッケージには、整数型と浮動小数点型の両方を変換する関数があります。 これは、ユーザーからの入力を受け入れるときの非常に一般的な操作です。 たとえば、人の年齢を尋ねるプログラムがある場合、その人が応答を入力すると、「 string 」としてキャプチャされます。 次に、それを「 int +」に変換して計算を行う必要があります。

文字列に小数点以下の桁がない場合、ほとんどの場合、 `+ strconv.Atoi `関数を使用して整数に変換する必要があります。 数値をフロートとして使用することがわかっている場合は、 ` strconv.ParseFloat +`を使用します。

毎日書かれたコード行を追跡するユーザーSammyの例を使用してみましょう。 ユーザーにより興味深いフィードバックを提供するために、これらの値を数学で操作することもできますが、これらの値は現在文字列に格納されています。

package main

import (
   "fmt"
)

func main() {
   lines_yesterday := "50"
   lines_today := "108"

   lines_more := lines_today - lines_yesterday

   fmt.Println(lines_more)
}
Outputinvalid operation: lines_today - lines_yesterday (operator - not defined on string)

2つの数値は文字列に格納されていたため、エラーを受け取りました。 減算のオペランド「-」は、2つの文字列値の有効なオペランドではありません。

文字列を整数に変換する `+ strconv.Atoi()`メソッドを含むようにコードを変更します。これにより、元は文字列であった値を使用して数学を実行できます。 文字列を整数に変換すると失敗する可能性があるため、エラーをチェックする必要があります。 「 if」ステートメントを使用して、変換が成功したかどうかを確認できます。

package main

import (
   "fmt"
   "log"
   "strconv"
)

func main() {
   lines_yesterday := "50"
   lines_today := "108"












   fmt.Println(lines_more)
}

文字列が数値ではない可能性があるため、 `+ strconv.Atoi()`メソッドは変換された型と潜在的なエラーの両方を返します。 ` strconv.Atoi `関数を使用して ` lines_yesterday `から変換する場合、値が変換されたことを確認するために ` err `の戻り値をチェックする必要があります。 ` err `が ` nil `でない場合は、 ` strconv.Atoi `が文字列値を整数に正常に変換できなかったことを意味します。 この例では、 ` if `ステートメントを使用してエラーをチェックし、エラーが返された場合は、 ` log.Fatal +`を使用してエラーを記録し、プログラムを終了します。

上記のコードを実行すると、次のものが得られます。

Output58

次に、数字ではない文字列を変換してみます。

package main

import (
   "fmt"
   "strconv"
)

func main() {
   a := "not a number"
   b, err := strconv.Atoi(a)
   fmt.Println(b)
   fmt.Println(err)
}

以下のエラーが発生します。

Output0
strconv.Atoi: parsing "not a number": invalid syntax

`+ b `が宣言されたが、 ` strconv.Atoi `が変換に失敗したため、値が ` b `に割り当てられることはありませんでした。 ` b `の値は ` 0 `であることに注意してください。 これは、Goにはデフォルト値があり、Goではゼロ値と呼ばれるためです。 ` strconv.Atoi +`は、文字列の変換に失敗した理由を説明するエラーを提供します。

文字列とバイトの変換

Goの文字列は、バイトのスライスとして保存されます。 Goでは、対応する変換 `+ [] byte()`および ` string()+`でラップすることにより、バイトのスライスと文字列の間で変換できます。

package main

import (
   "fmt"
)

func main() {
   a := "my string"

   b := []byte(a)

   c := string(b)

   fmt.Println(a)

   fmt.Println(b)

   fmt.Println(c)
}

ここでは、文字列値を「+ a 」に保存し、それをバイトスライス「 b 」に変換してから、バイトスライスを「 c 」として文字列に変換しました。 次に、画面に ` a `、 ` b `、および ` c +`を印刷します。

Outputmy string
[109 121 32 115 116 114 105 110 103]
my string

出力の最初の行は、元の文字列「+ my string +」です。 出力される2行目は、元の文字列を構成するバイトスライスです。 3行目は、バイトスライスを安全に変換して文字列に戻し、印刷して戻すことができることを示しています。

結論

このGoチュートリアルでは、主に組み込みメソッドを使用して、重要なネイティブデータ型のいくつかを他のデータ型に変換する方法を示しました。 Goでデータ型を変換できるようになると、ユーザー入力を受け入れたり、異なる数値型間で数学を実行したりすることができます。 後で、Goを使用して、データベースやAPIなどのさまざまなソースからデータを受け入れるプログラムを作成する場合、これらの変換メソッドを使用して、データを操作できるようにします。 また、データをより小さなデータ型に変換することにより、ストレージを最適化することもできます。

Goでのデータ型の詳細な分析が必要な場合は、https://www.digitalocean.com/community/tutorials/understanding-data-types-in-go [Goのデータ型について]の記事をご覧ください。