Golang 特殊类型
时间:2022-07-25
本文章向大家介绍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传参需要特殊处理。
- 进程监控工具supervisor 启动Mongodb
- 祭奠那些年,我弃坑的开源轮子
- 这些奇技浮巧,助你优化前端应用性能
- Stepping.js——两步完成前后端分离架构设计
- 我的职业是前端工程师【十】客户端存储艺术:数据存储与模型
- 【开源】2md:将复制的内容、网页转成 markdown
- React Native 持续部署实践— push 代码构建出新版的 Growth
- 技巧 - 如何好一个 Git 提交信息及几种不同的规范
- React、Vue、Ember 及其他前端开发者,请暂缓更新到 Chrome 59 浏览器
- 微软开源全新的文档生成工具DocFX
- 使用 MimeKit 和 MailKit 发送邮件
- 使用 React Native 重写大型 Ionic 应用后,我们想分享一下这八个经验
- 基于OWin的Web服务器Katana发布版本3
- 【工具推荐】图像界的魔术师 ImageMagick
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kali内网使用正向shell入侵
- KALI拿到shell后提权操作
- KALI 内网渗透记录
- CentOS7部署Grafana
- CentOS7网卡配置文件详解
- 基于docker搭建jenkins
- [周末往期回顾]Oracle Data Guard 参数介绍
- 程序员必备CDN加速jsDelivr+Gihub远程仓库
- java_方法的定义、调用、重载
- Oracle参数解析(nls_calendar)
- java_List、Set、Conllections工具类
- Oracle参数解析(OPEN_CURSORS)
- java_Collection、Map、泛型的使用
- java_线程、同步、线程池
- Oracle参数解析(nls_timestamp_format)