Go各種型別轉換及函式的高階用法
阿新 • • 發佈:2019-01-24
golang是強型別語言,在應用過程中型別轉換基本都會用到。下面整理一下常用的型別轉換,會持續更新。
整形轉字串
fmt.Println(strconv.Itoa(100))
該方法的原始碼是:
// Itoa is shorthand for FormatInt(i, 10). func Itoa(i int) string { return FormatInt(int64(i), 10) }
可以看出是FormatInt方法的簡單實現。
字串轉整形
i, _ := strconv.Atoi("100") fmt.Println(i)
64位整形轉字串
var i int64 i = 0x100 fmt.Println(strconv.FormatInt(i, 10))
FormatInt第二個引數表示進位制,10表示十進位制。
位元組轉32位整形
b := []byte{0x00, 0x00, 0x03, 0xe8} bytesBuffer := bytes.NewBuffer(b) var x int32 binary.Read(bytesBuffer, binary.BigEndian, &x) fmt.Println(x)
其中binary.BigEndian表示位元組序,相應的還有little endian。通俗的說法叫大端、小端。
32位整形轉位元組
var x int32 x = 106 bytesBuffer := bytes.NewBuffer([]byte{}) binary.Write(bytesBuffer, binary.BigEndian, x) fmt.Println(bytesBuffer.Bytes())
位元組轉字串
fmt.Println(string([]byte{97, 98, 99, 100}))
字串轉位元組
fmt.Println([]byte("abcd"))
變參及匿名的用法:
/** * Created by Administrator on 13-12-18. */ package main import ( "fmt" "os" ) func f1(args ...interface {}) { f2(args...) f2(args[1:]...) } func f2(args ...interface {}) { for i, v := range args { fmt.Fprintf(os.Stdout, "i = %d %v\n", i, v) } fmt.Fprintf(os.Stdout, "--------------\n") } func main() { f1(1, "hello", 3.14, main) // 匿名函式 1 f := func(i, j int) (result int) { // f 為函式地址 result = i+j return } fmt.Fprintf(os.Stdout, "f = %v f(1,3) = %v\n", f, f(1, 3)) // 匿名函式 2 x, y := func(i, j int) (m, n int) { // x y 為函式返回值 return j, i }(1, 9) // 直接建立匿名函式並執行 fmt.Fprintf(os.Stdout, "x = %d y = %d\n", x, y) }
i = 0 1
i = 1 hello
i = 2 3.14
i = 3 0x4012c0
--------------
i = 0 hello
i = 1 3.14
i = 2 0x4012c0
--------------
f = 0x401690 f(1,3) = 4
x = 9 y = 1
回撥函式的實現:
package main
import (
"fmt"
"strconv"
)
//宣告一個saveLog型別,這個型別其實表示一個函式定義
type saveLog func(msg string)
//這個函式的第二個引數是一個函式
//這個函式將一個字串轉換為Int型別,如果失敗了,則返回0,並輸出錯誤。
func stringToInt(s string, log saveLog) int64 {
if value, err := strconv.ParseInt(s, 0, 0); err != nil {
log(err.Error())
return 0
} else {
return value
}
}
//記錄日誌的函式實現
func myLog(msg string) {
fmt.Println("Find error:", msg)
}
//在呼叫第二個stringToInt的時候會發生執行時的錯誤輸出
func main() {
stringToInt("123", myLog)
stringToInt("s", myLog)
}
執行結果為:
$ go build func_callback.go
$ ./func_callback
Find error: strconv.ParseInt: parsing "s": invalid syntax