Heim  >  Artikel  >  Backend-Entwicklung  >  Go-Tutorial zur Konvertierung von Sprachdatentypen

Go-Tutorial zur Konvertierung von Sprachdatentypen

尚
nach vorne
2019-12-30 17:49:172371Durchsuche

Go-Tutorial zur Konvertierung von Sprachdatentypen

Go führt keine implizite Typkonvertierung von Daten durch und kann Konvertierungsvorgänge nur manuell durchführen. Werfen wir einen Blick auf die Methode der Datentypkonvertierung in go language .

Einfache Konvertierungsoperation

Die Art und Weise, Datentypen zu konvertieren, ist sehr einfach.

valueOfTypeB = typeB(valueOfTypeA)

Zum Beispiel:

// 浮点数
a := 5.0

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

Go ermöglicht die Konvertierung zwischen zwei Typen mit derselben zugrunde liegenden Struktur. Zum Beispiel:

// 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)

Aber Hinweis:

1. Nicht alle Datentypen können konvertiert werden, beispielsweise kann der String-Typ „abcd“ im alphabetischen Format in int konvertiert werden Es wird definitiv scheitern

2. Es ist sicher, Werte mit niedriger Genauigkeit in Werte mit hoher Genauigkeit umzuwandeln. Allerdings geht die Präzision verloren, wenn Werte mit hoher Genauigkeit in Werte mit niedriger Genauigkeit umgewandelt werden. Konvertieren Sie beispielsweise int32 In int16 und float32 in int konvertieren

3 Diese einfache Konvertierungsmethode kann int (float) und string nicht ineinander konvertieren. Zum Konvertieren über große Typen hinweg können Sie verwenden Die vom strconv-Paket bereitgestellten Funktionen

strconv

Das strconv-Paket bietet Typkonvertierungsfunktionen zwischen Zeichenfolgen und einfachen Datentypen. Einfache Typen können in Zeichen umgewandelt werden Strings können auch in andere einfache Typen konvertiert werden.

Dieses Paket bietet viele Funktionen, die grob in mehrere Kategorien unterteilt sind:

1. Konvertieren Sie einen String in int: Atoi()

2. Konvertieren Sie int in einen String: Itoa ()

3. ParseTP-Klassenfunktion konvertiert String in TP-Typ: ParseBool(), ParseFloat(), ParseInt(), ParseUint(). Da die Konvertierung von Zeichenfolgen in andere Typen möglicherweise fehlschlägt, verfügen diese Funktionen über einen zweiten Rückgabewert, der angibt, ob eine Konvertierung durchgeführt werden soll Erfolgreich ändern

4. FormatTP-Klassenfunktion konvertiert andere Typen in String: FormatBool(), FormatFloat(), FormatInt(), FormatUint()

5. Die AppendTP-Klassenfunktion wird verwendet, um TP in einen String umzuwandeln und ihn dann an ein Slice anzuhängen: AppendBool(), AppendFloat(), AppendInt(), AppendUint()

und andere grundsätzlich ungenutzte Funktionen finden Sie im offiziellen Handbuch: go doc strconv oder https://golang.org/pkg/strconv/.

Wenn einige Typen nicht konvertiert werden können, wird ein Fehler gemeldet. Der zurückgegebene Fehler ist der selbstdefinierte Fehlertyp im strconv-Paket. Es gibt zwei Arten Fehler:

var ErrRange = errors.New("value out of 

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

Zum Beispiel ist die Verwendung von Atoi("a") zum Konvertieren von "a" in den Typ int natürlich erfolglos. Wenn print gibt Fehlerinformationen aus und zeigt Folgendes an:

strconv.Atoi: parsing "a": invalid 

syntax

Konvertierung zwischen String und Int

Am häufigsten ist die Konvertierung zwischen String und Int:

1.int wird in einen String konvertiert: Itoa()

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

2.string wird in einen int konvertiert: Atoi()

func Atoi(s string) (int, error)

Da der String möglicherweise nicht in int konvertiert wird, verfügt diese Funktion über zwei Rückgaben Wert: Der erste Rückgabewert wird in int konvertiert Wert, und der zweite Rückgabewert bestimmt, ob die Konvertierung erfolgreich ist.

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

Parse-Klassenfunktion

Parse-Klassenfunktion wird verwendet, um Zeichenfolgen in Werte eines bestimmten Typs umzuwandeln: ParseBool(), ParseFloat(), ParseInt() , ParseUint().

Da die String-Konvertierung in andere Typen möglicherweise fehlschlägt, haben diese Funktionen zwei Rückgabewerte, der erste Rückgabewert wird gespeichert Der konvertierte Wert, der zweite Rückgabewert, bestimmt, ob die Konvertierung erfolgreich ist.

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() kann nur Gleitkommazahlen vom Typ float64 empfangen.

ParseInt() und ParseUint() haben 3 Parameter:

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

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

Der Parameter bitSize gibt an, in welches Bit von int/uint konvertiert werden soll , 64. Wenn bitSize=0 Zeit, die die Konvertierung in den Typ int oder uint anzeigt. Beispielsweise bedeutet bitSize=8, dass der Typ des konvertierten Werts int8 oder uint8 ist.

Der Basisparameter gibt die Basismethode an, die zum Parsen der angegebenen Zeichenfolge verwendet werden soll. Gültige Werte sind 0 und 2-36. Wenn Basis=0 , was darauf hinweist, dass das Präfix der Zeichenfolge verwendet wird, um zu bestimmen, welche Basis analysiert werden soll: diejenigen, die mit 0x beginnen, werden hexadezimal analysiert, diejenigen, die mit 0 beginnen Es wird im Oktalformat analysiert, die anderen werden im Dezimalformat analysiert.

Parst „-42“ im Dezimalmodus und speichert es als int64-Typ:

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

64)

Parst „23“ im Quinärmodus und speichert es als int64-Typ:

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

Weil Im 5-stelligen System bedeutet 23, dass man zweimal trägt und 3 addiert, die entsprechende Dezimalzahl ist also 5*2+3=13.

Parsen Sie 23 im Hexadezimalformat und speichern Sie es als int64-Typ:

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

Da im Hexadezimalformat 23 das 2-fache Tragen und das Addieren von 3 bedeutet, ist die entsprechende Dezimalzahl 16 *2+3=35 .

Parsen Sie 23 in Basis 15 und speichern Sie es als int64-Typ:

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

Denn in Basis 15 bedeutet 23 das 2-fache Tragen und das Addieren von 3, sodass die entsprechende Dezimalzahl 15 *2+3 ist =33.

Klassenfunktion formatieren

Formatiert den angegebenen Typ in einen String-Typ: 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() und FormatUint() haben zwei Parameter:

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

Der zweite Parameter base gibt die Basis an, in die der erste Parameter konvertiert werden soll. Der gültige Wert ist 2<=base< ;=36 . Bei der Angabe Wenn die Basisziffer größer als 10 ist, wird der Wert über 10 durch die Buchstaben a–z dargestellt. Beispielsweise werden im Hexadezimalformat jeweils die Zahlen 10-15 verwendet a-f bedeutet, dass im Hexadezimalsystem die Werte 10-16 jeweils durch a-g dargestellt werden.

Zum Beispiel: FormatInt(-42, 16) bedeutet die Konvertierung von -42 in eine Hexadezimalzahl, und das Konvertierungsergebnis ist -2a.

FormatFloat() hat viele Parameter:

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教 程栏目。

Das obige ist der detaillierte Inhalt vonGo-Tutorial zur Konvertierung von Sprachdatentypen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen