Golang 类型

栏目: Go · 发布时间: 5年前

内容简介: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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Head First Design Patterns

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》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具