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;有点像短变量赋值,这些变量也是可以不预先声明,如果值是表达式比较复杂最好分开声明;多重赋值有点像元组;

最新文章

  1. redis持久化配置
  2. Android安全开发之WebView中的地雷
  3. 在c#中用指针操作图片像素点
  4. iOS中 视频直播功能-流媒体的使用(详解)韩俊强的CSDN博客
  5. wifi详解(二)
  6. MySQL提供的错误日志中的错误级别一共有3个分别为:
  7. standing
  8. 使用LayUI操作数据表格
  9. c# RSA加密和解密
  10. Android图像数据传递到C++的一些坑
  11. Learn Plan
  12. React的入门知识与概念【1】
  13. vue 中 使用百度编辑器 UEditor
  14. 将mysql的表导出为excel
  15. centos7安装terminator
  16. java web开发遇到的常见问题解决办法(汇总贴)
  17. mysql实现复杂groupby : GROUP_CONCAT
  18. C和C++不容易发现的区别
  19. Ubuntu 下载
  20. JdbcTemplate实现CRUD操作

热门文章

  1. 解释下Http协议
  2. docker运行puppeteer出现defucnt僵尸进程
  3. ubuntu之路——day4(今天主要看了神经网络的概念)
  4. 10个超漂亮的CSS 3D特效
  5. python 日期
  6. openssl从内存中读取私钥进行签名
  7. 前端 MV*框架的意义
  8. Spring中集成Ehcache缓存
  9. JVM 初始化阶段例子
  10. Oracle基本操作 ora-01031 insufficient privileges