Golang 类型

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

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


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

查看所有标签

猜你喜欢:

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

技术领导之路(中英文对照)

技术领导之路(中英文对照)

Gerald M.Weinberg / 余晟 / 电子工业出版社 / 2009-12 / 69.00元

《技术领导之路:全面解决问题的途径(中英文对照)》内容简介:搞定技术问题并不简单,但与人打交到也并非易事。作为一个技术专家,你是否在走上管理岗位时遇到了各种不适“症状”?《技术领导之路:解决问题的有机方法》一书将帮助你成为一个成功的解决问题的领导者。书中温伯格从一个反思者的角度阐述了要成为一个成功的解决问题的领导者必备的3个技能——MOI,即激励(Motivation)、组织(Organizati......一起来看看 《技术领导之路(中英文对照)》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具