内容简介:Go语言的类型很多,简单的类型(int,string,float等)这里不再赘述。下面讲一些开发中可能用到特殊类型声明一个具体的user结构体类型
Go语言的类型很多,简单的类型(int,string,float等)这里不再赘述。
下面讲一些开发中可能用到特殊类型
struct 类型
package main type User struct { Id int Name string Amount float64 } func main() { //声明struct var u User u.Id = 1 }
声明一个具体的user结构体类型
声明函数类型
示例1
package main import "fmt" func main() { var fn func() fn = func() { fmt.Println("anonymous func") } fn() fn = test fn() } func test() { fmt.Println("test") }
示例2
package main import "fmt" func main() { var fn func() (interface{}, error) fn=test1 name,err := fn() fmt.Println(name,err) } func test1() (interface{}, error){ fmt.Println("test1") return "test1 func", nil }
示例3
package main import "fmt" func main() { var fn func(interface{}) error fn = test3 err := fn("test3") fmt.Println(err) } func test3(name interface{}) error { fmt.Println(name) return nil }
通用类型 interface
package main import ( "fmt" "reflect" ) type User struct { Id int Name string Amount float64 } type HandlerTypeVoid func() type HandlerTypeString func() string type HandlerTypeError func(interface{}) error func main() { var i interface{} i = "string" fmt.Println(i) i = 1 fmt.Println(i) i = User{Id: 2} //i.(User).Id = 15 //运行此处会报错,在函数中修改interface表示的结构体的成员变量的值,编译时遇到这个编译错误,cannot assign to i.(User).Id fmt.Println(i.(User).Id) i = test r := i.(func(v interface{}) error)("test_1") fmt.Println(r) //不同过反射调用函数 var err error switch i.(type) { //通过使用.(type)方法可以利用switch来判断接口存储的类型。 case func(string): case func(string, string): //... case func(interface{}) error: if f, ok := i.(func(v interface{}) error); ok { err = HandlerTypeError(f)("test_2") } break default: break } fmt.Println(err) //通过反射 v := reflect.ValueOf(i) rargs := make([]reflect.Value, 1) rargs[0] = reflect.ValueOf("test_3") res := v.Call(rargs) fmt.Println(res) } func test(name interface{}) error { fmt.Println(name) return nil }
interface 类型作为参数可以接受任何类型的参数,其中struct和func传参需要特殊处理。
links
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- golang的值类型,指针类型和引用类型&值传递&指针传递
- Scala 类型的类型(三)
- Scala 类型的类型(二)
- Scala 类型的类型(三)
- Scala 类型的类型(二)
- golang: 类型转换和类型断言
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Design Patterns
Elisabeth Freeman、Eric Freeman、Bert Bates、Kathy Sierra、Elisabeth Robson / O'Reilly Media / 2004-11-1 / USD 49.99
You're not alone. At any given moment, somewhere in the world someone struggles with the same software design problems you have. You know you don't want to reinvent the wheel (or worse, a flat tire),......一起来看看 《Head First Design Patterns》 这本书的介绍吧!