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;有点像短变量赋值,这些变量也是可以不预先声明,如果值是表达式比较复杂最好分开声明;多重赋值有点像元组;
go零碎总结的更多相关文章
- webdriver零碎知识点
#零碎知识点,用于记录平时遇到的比较杂的知识点 driver.current_url 获取当前url phantomjs 实现无浏览器界面自动化测试(driver = webdriver.Phanto ...
- 【zepto学习笔记02】零碎点
前言 上次我们看了zepto的选择器方面的东西,其实zepto简单很大程度是因为他用了最新的检索器querySelectorAll,今天我们来学习下zepto的一些零碎点的地方吧,主要根据zepto官 ...
- C++ 零碎知识点
C++的一些知识点比较零碎,下面清单的形式做一些记录与归纳,以供参考. 1.赋值操作符重载(深复制): (1)由于目标对象可能引用了以前的一些数据,所以应该先delete这些数据: (2)注意到对象可 ...
- C++模板元编程 - 3 逻辑结构,递归,一点列表的零碎,一点SFINAE
本来想把scanr,foldr什么的都写了的,一想太麻烦了,就算了,模板元编程差不多也该结束了,离开学还有10天,之前几天部门还要纳新什么的,写不了几天代码了,所以赶紧把这个结束掉,明天继续抄轮子叔的 ...
- ASP.Net零碎
ASP.Net零碎 ServerPush 什么是ServerPush,服务器向客户端浏览器“推送”,其实就是“长连接”. 只有浏览器请求服务器端,服务器端才有给浏览器响应数据,不会主动向浏览器推送数据 ...
- 【MySQL】MySQL零碎积累
MySQL零碎积累 ■ 在给MySQL添加新用户时可以这么操作: create user 'newUser' identified by 'password'; grant all privilege ...
- 【Python】 零碎知识积累 II
[Python] 零碎知识积累 II ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个 ...
- 【Python】 零碎知识积累 I
大概也是出于初高中时学化学,积累各种反应和物质的习惯,还有大学学各种外语时一看见不认识的词就马上记下来的习惯,形成了一种能记一点是一点的零碎知识记录的癖好.这篇文章就是专门拿来记录这些零碎知识的,没事 ...
- thinkphp零碎小知识
在使用thinkphp搭建后台的时候,有很多的参数需要去配置,有的记不住还要去查找,这里把一些基本的参数整理一下,还有些零碎的知识点,与大家共勉,希望能方便大家. 友情提示:这些配置是 thinkph ...
- C++入门笔记(一)零碎基础知识
零碎基础知识 一.创建和运行程序 1.使用文本编辑器编写程序,保存为文件,该文件就叫源代码. 2.编译源代码:运行一个程序,将源代码翻译为主机使用的内部语言----机器语言.包含了 编译后程序的文件就 ...
随机推荐
- fgets()函数
声明: char *fgets(char *str,int n,FILE* stream) 参数: str—这是指向一个字符数组的指针,该数组存储了要读取的字符串 n – 这是要读取的最大字符数(包括 ...
- 原创:从海量数据中查找出前k个最小或最大值的算法(java)
现在有这么一道题目:要求从多个的数据中查找出前K个最小或最大值 分析:有多种方案可以实现.一.最容易想到的是先对数据快速排序,然后输出前k个数字. 二.先定义容量为k的数组,从源数据中取出前k个填 ...
- Note_4.7
2019/4/7 奇奇怪怪的笔记 狄利克雷卷积 \(μ∗1=ϵ\),莫比乌斯反演 \(Id=φ∗1⇒φ=μ∗Id\) \(d=1∗1⇒1=μ∗d\) \(σ=Id∗1⇒Id=μ∗σ\) \(σ=φ∗ ...
- 移动端滚动选择器mobileSelect.js
一款多功能的移动端滚动选择器,支持单选到多选.支持多级级联.提供自定义回调函数.提供update函数二次渲染.重定位函数.兼容pc端拖拽等等.. 特性 原生js移动端选择控件,不依赖任何库 可传入普通 ...
- php手记之06-tp5验证器
# 创建验证器 php think make:validate 模块名/验证器名(首字母大写) # 验证器 namespace app\index\validate; use think\Valida ...
- 深度学习面试题10:二维卷积(Full卷积、Same卷积、Valid卷积、带深度的二维卷积)
目录 二维Full卷积 二维Same卷积 二维Valid卷积 三种卷积类型的关系 具备深度的二维卷积 具备深度的张量与多个卷积核的卷积 参考资料 二维卷积的原理和一维卷积类似,也有full卷积.sam ...
- vue cli 静态资源导入 路径
1.public文件夹 使用绝对路径引入. 2.assets文件夹 使用相对路径引入. https://cli.vuejs.org/zh/guide/html-and-static-assets.ht ...
- Android studio: Android Studio 3.5格式化布局代码时错乱
Android studio 又来搞事情了,更新到3.5版本后,格式化布局文件代码时,布局文件代码竟然会发生变化,意思是不让格式化代码了呗? 垃圾的IDE. 解决办法: “File”-"Se ...
- mysql - ERROR 1114 (HY000): The table is full
mysql - ERROR 1114 (HY000): The table is full - Stack Overflowhttps://stackoverflow.com/questions/73 ...
- Vulnerability Scanning Tools
Category:Vulnerability Scanning Tools - OWASP https://www.owasp.org/index.php/Category:Vulnerability ...