ホームページ >バックエンド開発 >Golang >Go 言語のデータ型変換チュートリアル

Go 言語のデータ型変換チュートリアル

尚
転載
2019-12-30 17:49:172406ブラウズ

Go 言語のデータ型変換チュートリアル

#Go はデータの暗黙的な型変換を実行せず、変換操作は手動でのみ実行できます。 go言語でのデータ型変換の方法を見てみましょう。 。

簡単な変換操作

データ型を変換する方法は非常に簡単です。

valueOfTypeB = typeB(valueOfTypeA)

例:

// 浮点数
a := 5.0

// 转换为int类型
b := int(a)

Go では、同じ基礎構造を持つ 2 つの型間の変換が可能です。例:

// IT类型的底层是int类型
type IT int

// a的类型为IT,底层是int
var a IT = 5

// 将a(IT)转换为int,b现在是int类型
b := int(5)

// 将b(int)转换为IT,c现在是IT类型
c := IT(b)

ただし、注意:

1. すべてのデータ型を変換できるわけではありません。たとえば、アルファベット形式の文字列型「abcd」は int に変換できます。 必ず失敗します。

2. 低精度を高精度に変換するのは安全ですが、高精度の値を低精度に変換すると精度が失われます。たとえば、int32 を変換します。 int16 と float32 を int

3 に変換します。この単純な変換メソッドでは、int (float) と string を相互に変換することはできません。大きな型間で変換するには、以下を使用できます。 strconv パッケージが提供する関数

strconv

strconv パッケージは、文字列と単純なデータ型の間の型変換関数を提供します。単純型は文字に変換できます 文字列は他の単純な型に変換することもできます。

このパッケージには多くの関数が用意されており、大まかにいくつかのカテゴリに分類されます:

1. 文字列を int に変換: Atoi()

2. int を文字列に変換:itoa ()

3. ParseTP クラス関数は文字列を TP 型に変換します: ParseBool()、ParseFloat()、ParseInt()、 ParseUint()。文字列を他の型に変換すると失敗する可能性があるため、これらの関数には変換するかどうかを示す 2 番目の戻り値があります。 変換成功

4. FormatTP クラス関数は他の型を文字列に変換します: FormatBool()、FormatFloat()、FormatInt()、 FormatUint()

5. AppendTP クラス関数は、TP を文字列に変換し、それをスライスに追加するために使用されます: AppendBool(), AppendFloat()、AppendInt()、AppendUint()

および基本的に使用されないその他の関数については、公式マニュアルを参照してください: go doc strconv または https://golang.org/pkg/strconv/。

一部の型を変換できない場合、エラーが報告されます。返されるエラーは、strconv パッケージで独自に定義されたエラー タイプです。 2種類あります エラー:

var ErrRange = errors.New("value out of 

range")
var ErrSyntax = errors.New("invalid syntax")

たとえば、Atoi("a") を使用して "a" を int 型に変換することは当然失敗します。もし Print はエラー情報を出力し、次のように表示されます。

strconv.Atoi: parsing "a": invalid 

syntax

文字列と整数の間の変換

最も一般的なのは、文字列と整数の間の変換です:

1. int を string に変換:itoa()

// Itoa(): int -> string
println("a" + strconv.Itoa(32))  // a32

2.string を int に変換:Atoi()

func Atoi(s string) (int, error)

string は int に変換できない場合があるため、この関数には 2 つの戻り値があります。最初の戻り値は int に変換されます 値を返し、2 番目の戻り値によって変換が成功したかどうかが決まります。

// Atoi(): string -> int
i,_ := strconv.Atoi("3")
println(3 + i)   // 6
// Atoi()转换失败
i,err := strconv.Atoi("a")
if err != nil {
    println("converted failed")
}

Parse クラス関数

Parse クラス関数は、文字列を指定された型の値に変換するために使用されます: ParseBool()、ParseFloat()、ParseInt() 、 ParseUint()。

他の型への文字列変換は失敗する可能性があるため、これらの関数には 2 つの戻り値があり、最初の戻り値が保存されます。 変換された値、つまり 2 番目の戻り値によって、変換が成功したかどうかが決まります。

b, err := strconv.ParseBool("true")
f, err := strconv.ParseFloat("3.1415", 64)
i, err := strconv.ParseInt("-42", 10, 64)
u, err := strconv.ParseUint("42", 10, 64)

ParseFloat() は float64 型の浮動小数点数のみを受け取ることができます。

ParseInt() と ParseUint() には 3 つのパラメータがあります:

func ParseInt(s string, base int, bitSize int) 

(i int64, err error)
func ParseUint(s string, base int, bitSize int) (uint64, error)

bitSize パラメータは、変換する int/uint のビットを示し、有効な値は 0、8、16 です。 、32、および64。 bitSize=0の場合 場合は、int 型または uint 型に変換することを意味します。たとえば、bitSize=8 は、変換された値の型が int8 または uint8 であることを示します。

基本パラメーターは、指定された文字列の解析に使用する基本メソッドを示します。有効な値は 0 および 2 ~ 36 です。ベース=0の場合 、文字列のプレフィックスがどの塩基を解析するかを決定するために使用されることを示します。0x で始まるものは 16 進数で解析され、0 で始まるものは解析されます。 これは 8 進数形式で解析され、その他は 10 進数形式で解析されます。

「-42」を 10 進数モードで解析し、int64 型として保存します:

i, _ := strconv.ParseInt("-42", 10, 

64)

「23」を 5 進数モードで解析し、int64 型として保存します:

i, _ := strconv.ParseInt("23", 5, 64)
println(i)    // 13

Because 5 桁システムでは、23 は 2 回繰り上げて 3 を加算することを意味するため、対応する 10 進数は 5*2 3=13 となります。

23 を 16 進数で解析し、int64 型として保存します。

i, _ := strconv.ParseInt("23", 16, 64)
println(i)    // 35

16 進数では、23 は 2 回繰り上げて 3 を加算することを意味するため、対応する 10 進数は 16 *2 3=35 になります。

23 を 16 進数で解析し、int64 型として保存します。

i, _ := strconv.ParseInt("23", 15, 64)
println(i)    // 33

16 進数では、23 は 2 回繰り上げて 3 を加算することを意味するため、対応する 10 進数は 15 *2 3=33 になります。

Format クラス関数

指定された型を文字列型にフォーマットします: FormatBool()、FormatFloat()、FormatInt()、 FormatUint()。

s := strconv.FormatBool(true)
s := strconv.FormatFloat(3.1415, 'E', -1, 64)
s := strconv.FormatInt(-42, 16)
s := strconv.FormatUint(42, 16)

FormatInt() と FormatUint() には 2 つのパラメータがあります:

func FormatInt(i int64, base int) string
func FormatUint(i uint64, base int) string

2 番目のパラメータの Base は、最初のパラメータを変換する基数を指定します。有効な値は 2<=base< ;=36 です。 。指定する場合 の基本桁が 10 より大きい場合、10 を超える値は a ~ z の文字で表されます。たとえば、16 進数では、10 ~ 15 の数字がそれぞれ使用されます。 a~fは16進法で値10~16がそれぞれa~gで表されることを意味します。

例: FormatInt(-42, 16) は、-42 を 16 進数に変換することを意味し、変換結果は -2a になります。

FormatFloat() には多くのパラメータがあります:

func FormatFloat(f float64, fmt byte, prec, 

bitSize int) string

bitSize表示f的来源类型(32:float32、64:float64),会据此进行舍入。

fmt表示格式:'f'(-ddd.dddd)、'b'(-ddddp±ddd,指数为二进制) 、'e'(-d.dddde±dd,十进制指数)、'E'(-d.ddddE±dd,十进制指数)、 'g'(指数很大时用'e'格式,否则'f'格式)、'G'(指数很 大时用'E'格式,否则'f'格式)。

prec控制精度(排除指数部分):对'f'、'e'、'E',它表示小 数点后的数字个数;对'g'、'G',它控制总的数字个数。如果prec 为-1,则 代表使用最少数量的、但又必需的数字来表示f。

Append类函数

AppendTP类函数用于将TP转换成字符串后append到一个slice中:AppendBool()、 AppendFloat()、AppendInt()、AppendUint()。

Append类的函数和Format类的函数工作方式类似,只不过是将转换后的结果追加到一个 slice中。

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // 声明一个slice
    b10 := []byte("int (base 10):")
    
    // 将转换为10进制的string,追加到slice中
    b10 = strconv.AppendInt(b10, -42, 10)
    fmt.Println(string(b10))

    b16 := []byte("int (base 16):")
    b16 = strconv.AppendInt(b16, -42, 16)
    fmt.Println(string(b16))
}

输出结果:

int (base 10):-42
int (base 16):-2a

更多golang知识请关注golang教 程栏目。

以上がGo 言語のデータ型変換チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。