[Golang]: 進階用法
#golang #annotation #reflection #interface型別轉換 #tag
Golang Interface
Interface{} 型別轉換
Interface{} 型別轉換package main
import (
"fmt"
"strconv"
)
type str string
func (s str) String() string {
return string(s)
}
type Stringer interface {
String() string
}
func ToString(any interface{}) string {
if v, ok := any.(Stringer); ok {
return v.String()
}
switch v := any.(type) {
case int:
return strconv.Itoa(v)
case float64:
return strconv.FormatFloat(v, 'g', -1, 64)
}
return "???"
}
func main() {
var ex int = 1
fmt.Println(ToString(ex))
var ex2 float64 = 0.1
fmt.Println(ToString(ex2))
var ex3 Stringer = str("1")
fmt.Println(ToString(ex3))
}
Interface{} 多形
Interface{} 多形Golang Reflection
Golang Tag
Golang 低階指標用法 ( uintptr, unsafe.Pointer)
Escape Analysis 演算法


Reference
Last updated