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


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

查看所有标签

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

参与的胜利

参与的胜利

亨利·詹金斯 / 高芳芳 / 浙江大学出版社 / 2017-9-30 / CNY 42.00

《参与的胜利:网络时代的参与文化》是一场学者之间的对话,三位学者(亨利·詹金斯、伊藤瑞子和丹娜·博伊德)虽然来自不同的代际、不同的学科背景,但他们在相同的参与文化项目中展开合作,并试图解决相似的问题。 希望《参与的胜利:网络时代的参与文化》能够进一步激发团体内部及团体之间的对话,这些团体包括教育者、政策制定者、学者、关注参与文化的公民、业内人士、粉丝及其他任何关心我们文化的未来的人。理想的参......一起来看看 《参与的胜利》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

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

HEX CMYK 互转工具