背景
Go语言的类型很多,简单的类型(int, string, float等)这些都是具有名称的类型,在GO中已经预先声明好的类型,这里不再赘述。还有一些类型是通过类型声明(**type declaration**)创建的类型叫命名类型。
下面讲一些开发中可能用到特殊类型
struct类型
type User struct {Id intName stringAmount float64}func main() {var u Useru.Id = 1fmt.Println(jsonx.ToString(u)) //{"Id":1,"Name":"","Amount":0}}
声明函数类型
示例1
func main() {var fn func()fn = func() {fmt.Println("anonymous func")}fn() //anonymous funcfn = testfn() //test}func test() {fmt.Println("test")}
解释:
var fn func()将变量 fn 声明为 func() 类型,此时 f 就被俗称为“回调函数”,此时 f 的值为 nil。fn = test将 test() 函数作为值,赋给函数变量 fn,此时 fn 的值为 test() 函数。fn()使用函数变量 fn 进行函数调用,实际调用的是 test() 函数。
示例2
func main() {var fn func() (interface{}, error)fn = test1name, err := fn()fmt.Println(name, err) //test1 func <nil>}func test1() (interface{}, error) {fmt.Println("test1")return "test1 func", nil}
因为fn 和 test1 具有相同的参数和返回值,所以可以强制转换
示例三
func main() {var fn func(interface{}) errorfn = test3err := fn("test3")fmt.Println(err) //<nil>}func test3(name interface{}) error {fmt.Println(name)return nil}
