内容简介: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: 类型转换和类型断言
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。