As an efficient and concise programming language, Golang is also very flexible in data conversion. This article will explore some data type conversion methods in Golang, as well as some considerations in practical applications.
1. Basic data type conversion
To convert characters to numbers, you can use the Atoi function provided by the strconv package. If the conversion fails, 0 is returned.
Sample code:
package main import ( "fmt" "strconv" ) func main() { str := "123" num, err := strconv.Atoi(str) if err != nil { fmt.Println("转换失败") } else { fmt.Println("转换结果为:", num) } }
To convert numbers to characters, you can use the Itoa function provided by the strconv package.
Sample code:
package main import ( "fmt" "strconv" ) func main() { num := 123 str := strconv.Itoa(num) fmt.Println("转换结果为:", str) }
Character to byte slice, you can use []byte() to force Type conversion.
Sample code:
package main import ( "fmt" ) func main() { str := "hello world" b := []byte(str) fmt.Println("转换结果为:", b) }
Byte slice conversion to character, you can use string() forced type conversion .
Sample code:
package main import ( "fmt" ) func main() { b := []byte{104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100} str := string(b) fmt.Println("转换结果为:", str) }
If the value of int64 is within the int representation range, you can use int() to force Type conversion. If it's out of scope, type assertion is required.
Sample code:
package main import ( "fmt" ) func main() { var i64 int64 = 1234567890 var i int if i64 > int64(i) { fmt.Println("超过int类型取值范围") } else { i = int(i64) fmt.Println("转换结果为:", i) } }
Note: When performing type conversion, be sure to pay attention to the matching of the data type range, otherwise data truncation or overflow may occur.
2. Custom data type conversion
For custom data types, we can implement string conversion by overloading the String method of the type. At the same time, we can also implement JSON format conversion by overloading the MarshalJSON and UnmarshalJSON methods of the type.
Sample code:
package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func (p Person) String() string { return fmt.Sprintf("Name=%s, Age=%d", p.Name, p.Age) } func (p *Person) UnmarshalJSON(b []byte) error { type tmp Person t := &tmp{} err := json.Unmarshal(b, t) if err != nil { return err } p.Name = t.Name p.Age = t.Age return nil } func (p Person) MarshalJSON() ([]byte, error) { type tmp Person t := tmp(p) return json.Marshal(t) } func main() { p1 := &Person{"Tom", 18} // 转换为字符串 str := p1.String() fmt.Println("转换结果为:", str) // 转换为JSON格式 json1, _ := json.Marshal(p1) fmt.Println("转换结果为:", string(json1)) // 从JSON格式转换回来 str2 := `{"name":"Jerry","age":20}` var p2 Person json.Unmarshal([]byte(str2), &p2) fmt.Println("转换结果为:", p2) }
Through the above code, we can see that the conversion of custom types requires us to manually implement the conversion function so that it can be used normally.
3. Summary
This article summarizes the conversion methods of basic data types and custom data types in Golang, and also introduces some precautions. In practical applications, we need to flexibly choose different conversion methods according to specific needs in order to better process data.
The above is the detailed content of How to convert data in golang. For more information, please follow other related articles on the PHP Chinese website!