教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang 特殊类型

Golang 特殊类型

发布时间:2023-02-28   编辑:jiaochengji.com
教程集为您提供Golang 特殊类型等资源,欢迎您收藏本站,我们将为您提供最新的Golang 特殊类型资源

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 特殊类型”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
js 过滤特殊字符的简单例子
js特殊字符转义类型
Go语言空接口类型(interface{})
Go语言的函数、方法和接口
golang 面试题(十三)interface内部结构和nil详解
golang 初始化并赋值_Golang | 既是接口又是类型,interface是什么神仙用法?
golang中接口的面向对象(一)--多态特征
js过滤特殊字符小例子
Go语言接口(interface)的实现原理
关于Golang的那些事(五) -- 函数

[关闭]
~ ~