Golang 类型

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

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


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

查看所有标签

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

从零开始做产品经理

从零开始做产品经理

萧七公子 / 中国华侨出版社 / 2016-12-1 / 27.9

《从零开始做产品经理:产品经理的第一本书》根据产品经理的能力需求与成长体系,共分为八章内容,从了解产品开始,到挖掘用户需求、进行产品设计、管理团队、进行项目管理、产品运营、把握产品的生命周期,以及产品经理的成长路径,全面阐释了产品经理的修炼之道。《从零开始做产品经理:产品经理的第一本书》书中信息量大,图文并茂,论点与论据相得益彰,并且融合了丰富的案例与故事,使得整个阅读过程妙趣横生而且迅速开“悟道......一起来看看 《从零开始做产品经理》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具