go零碎总结
1.go里通过首字母大小写来区分它是私有的还是公有的,比如对于一个结构体属性一般就以大写开头(和Java不一样,不需要什么getter,setter方法);而对于方法而言,它是隶属于包(包名一定是小写的),因此大写表示它可以被包外访问,小写只能被包内访问;
还能声明在函数里,这种情况只对函数局部可见;
2.如果要声明一个变量但不初始化,必须指定类型,如var obj AnClassType;(常量用const,类型是type,函数是func),如果同时初始化可以用短变量的方式如obj := new (AnClass),注意,这里和其他语言的new AnClass()不一样;
3.1.13版本的go,string转换为字节数组,默认就是UTF-8的;
4.struct也是值类型,因此struct的变量不能和nil比较,而必须是&AStructObj;
5.如果方法返回时出现异常,则其值为默认值,如int是0,struct类型是一个{};
6.对于特殊名字,如JSON, HTML,则一般这样命名HTMLEscape()或htmlEscape()而不会叫escapeHtml();
7.对于普通方法定义一般是func met() (ret int, err error) {... ret = 3;return},只要需要返回返回值或异常其中的一种则最后就必须要有return,但是和Java等语言不一样的是不需要写return xxx,因为它就是返回函数签名里的ret和err;
而对于扩展函数则是这么写func (o AType) extMet() {..},这个写法和接口的实现写法一致,可以理解为扩展方法其实就是实现匿名的接口;注意AType不能是基础类型或基础类型别名,如int,但是可以是基础类型原型的其他类型,如type AType = int;
8.go里没有继承的说法,比如type BType AType{...}是不允许的,但是可以用组合,type Btype {AType},然后里面可以添加其他属性,这样可以很好的解决Java里PO,DTO之类的问题,不过注意,虽然BType里可以调用AType的所有属性,但是BType实例
不能赋值给AType类型变量;
9.go里的常用工具类一般是type名字的复数,如strings,errors等等;
10.如果不是涉及到多态,那其实用扩展函数就可以,但是要实现接口变量承载多个类型实例,则需要接口来实现;
11.go处理配置文件的工具为:github.com/spf13/viper,即viper,可以处理JSON、TOML、YAML、HCL和Java properties
12.go里的new一个结构体是new (StructType)【当然,这里new其实是一个内置函数,比如len和print和println等都是内置函数】,而不是像Java里new类一样的new AClass(),然后强制转换也是不一样,go里是 AType(o),而Java里一般是(AType) o,这里是go比较好,Java里如果转换后还要做操作一般还得再套一层括号。
13.go里日志框架可以用logrus;
14.go里可以用短变量声明来声明新变量(必须有新变量,多重赋值里也是至少存在一个新变量才能用短变量声明),即类似js里全局变量的声明方式,即不需要指定var、const,也不需要指定类型如 ob := obj;,ob必须是新的变量;
15.go里可以用多重赋值,如a, b, c = 1, 2, 3;有点像短变量赋值,这些变量也是可以不预先声明,如果值是表达式比较复杂最好分开声明;多重赋值有点像元组;
最新文章
- redis持久化配置
- Android安全开发之WebView中的地雷
- 在c#中用指针操作图片像素点
- iOS中 视频直播功能-流媒体的使用(详解)韩俊强的CSDN博客
- wifi详解(二)
- MySQL提供的错误日志中的错误级别一共有3个分别为:
- standing
- 使用LayUI操作数据表格
- c# RSA加密和解密
- Android图像数据传递到C++的一些坑
- Learn Plan
- React的入门知识与概念【1】
- vue 中 使用百度编辑器 UEditor
- 将mysql的表导出为excel
- centos7安装terminator
- java web开发遇到的常见问题解决办法(汇总贴)
- mysql实现复杂groupby : GROUP_CONCAT
- C和C++不容易发现的区别
- Ubuntu 下载
- JdbcTemplate实现CRUD操作