学习go的一些笔记
反射 reflect
type CfgSt struct{
	Match	*int64 `ini:"match"`
	Desc	string `ini:"desc"`
	Level	*int64	`ini:"level"`
}
如果结构体不是指针:
	typ := reflect.TypeOf(c)
	val := reflect.ValueOf(c)
如果结构体是指针:
	typ := reflect.TypeOf(c).Elem()
	val := reflect.ValueOf(c).Elem()
结构体成员数:
	val.NumField()
结构体成员名:
	val.Type().Field(idx).Name
结构体成员tag名:
	typ.Field(idx).Tag.Get("ini")
成员值:
	val.Field(idx).Interface()
值得类型断言
switch v := val.Field(idx).Interface().(type) {
		case *int64:
			if val.Field(idx).IsNil() {
				continue
			}
			log.Println(*v)
		case string:
			log.Println(v)
		}
接口 interface
- 如果对象实现了接口的所有方法,那么可以把对象的实例赋值给该接口;但是接口不能调用对象中接口没有定义的方法。
 - 可以在编译时检查接口是否被实现,利用下面两种中的一种即可
- var _ face = (*rabbit)(nil) // 推荐用这种方式
 - var _ face = new(rabbit)
 
 - 传值的方法会默认实现传引用的方法,反之不成立
- 比如 func (r rabbit) Sayhi() 默认实现 func (r *rabbit) Sayhi(),但是反之不成立
 
 - 不能直接对内嵌类型添加方法
 
package main
import (
    "log"
)
type face interface {
    Sayhi()
    Bye()
}
type rabbit struct {}
func (r rabbit) Sayhi() {
    log.Println("rabbit say hi")
}
func (r rabbit) Do() {
    log.Println("rabbit do something")
}
func (r rabbit) Bye() {
    log.Println("rabbit say bye")
}
type ty int64
func (r ty) Sayhi() {
    log.Println("ty say hi")
}
func (r ty) Bye() {
    log.Println("ty say bye")
}
func (r ty) Do() {
    log.Println("ty do something")
}
// 类似于assert断言,在编译时候检查是否实现了接口
// 类型断言是在运行时动态检查
var _ face = (*rabbit)(nil)
var _ face = new(rabbit)	// 不推荐,因为为对象会分配空间
var _ face = (*ty)(nil)
func main() {
    var i face
    i = rabbit{}
    i.Sayhi()
    //i.Do()
    i.Bye()
    var a ty    // 不可少不能直接用 i = ty{}
    i = a
    i.Sayhi()
    i.Bye()
}
类型断言
- 指定类型typename断言
 
	if v, ok := i.(typename);ok {
        log.Println(v)
    } else {
        log.Println("invalid")
    }
- 不指定类型断言
 
	switch i.(type) {
		case int:
			...
		case int64:
			...
		...
	}
判断map是否包含成员
类似于类型断言
	m := make(map[string]int, 0)
	if v, ok := m["asd"];ok {
        log.Println(v)
    } else {
        log.Println("invalid")
    }
流控语句
- fallthrough
 
go 中switch每个分支默认执行完毕break,这与c语言不一样。
可以通过添加 fallthrough来实现类似c的效果
	switch {
    case false:
        log.Println(0)
        fallthrough
    case true:
        log.Println(1)
        fallthrough
    case false:
        log.Println(2)
        fallthrough
    default:
        log.Println("default cannot use fallthrough")
        //fallthrough
    }
- break
 
go 中break可以指定退出的循环,默认只退出最内层循环
	mark:
    for {
        for idx := 0; idx < 10; idx++ {
            log.Println("for ", idx)
            if idx == 5 {
                break mark
            }
        }
    }
												
											学习go的一些笔记的更多相关文章
- canvas学习之API整理笔记(二)
		
前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...
 - 学习Logistic Regression的笔记与理解(转)
		
学习Logistic Regression的笔记与理解 1.首先从结果往前来看下how logistic regression make predictions. 设我们某个测试数据为X(x0,x1, ...
 - 转载-《Python学习手册》读书笔记
		
转载-<Python学习手册>读书笔记 http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html
 - python学习第五次笔记
		
python学习第五次笔记 列表的缺点 1.列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢. 2.列表只能按照顺序存储,数据与数据之间关联性不强 数据类型划分 数据类型:可变数据 ...
 - 前端学习:JS(面向对象)代码笔记
		
前端学习:JS(面向对象)代码笔记 前端学习:JS面向对象知识学习(图解) 创建类和对象 创建对象方式1调用Object函数 <body> </body> <script ...
 - 《Data Structures and Algorithm Analysis in C》学习与刷题笔记
		
<Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...
 - Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板
		
原文:Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...
 - Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer
		
原文:Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处 ...
 - Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍
		
原文:Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本 ...
 - Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)
		
原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介) 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...
 
随机推荐
- python设计模式之责任链模式
			
python设计模式之责任链模式 开发一个应用时,多数时候我们都能预先知道哪个方法能处理某个特定请求.然而,情况并非总是如此.例如,想想任意一种广播计算机网络,例如最早的以太网实现.在广播计算机网络中 ...
 - Hydra's plan
			
省选前的计划,实时更新(不知道能不能把挖的坑填完呢qwq) 链接
 - gtk.Builder.AddFromFile SIGSEGV.
			
可能是由于GTK没有初始化的缘故,在程序开头加上gtk.Init(nil)进行初始化 或者参考我这篇博客就不会出错了
 - Spring Cloud Config Client 超时与重试
			
简介 有时客户端需要在 config server 无响应时进行重试,以给 config server 时间进行恢复.利用 spring 提供的重试组件,我们可以方便的配置重试机制,包括重试间隔,重试 ...
 - Salesforce学习笔记之Actions and Recommendations
			
设置Actions and Recommendations(Salesforce提供的标准元素),Salesforce上的文档说有两种方法,即Deployment和Process Builder(通过 ...
 - eric4 中 pyqt .py文件结尾的 代码
			
if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) ui = MainWindow() ...
 - [PyTorch 学习笔记] 1.4 计算图与动态图机制
			
本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson1/computational_graph.py 计算图 深 ...
 - rcp
			
rcp的命令 rcp,远程文件复制.rcp既可以在本地主机和远程主机之间进行文件复制,也可以用于在两个远程主机之间进行文件复制.除了复制文件外,rcp也可以用于目录复制,只需要加参数-r. rcp的命 ...
 - 牛客网PAT练兵场-人口普查
			
题目地址:https://www.nowcoder.com/pat/6/problem/4054 题解:结构体排序即可 /** * Copyright(c) * All rights reserved ...
 - vps的搭建
			
最近一直想自己搭建一款vps使用,但是苦于一直没有时间,直到今天得空,与大家一起分享下. 服务商的选择 因为自己之前在 vultr 上还留有余额(60$呢,好几百块大洋呢),所以我的服务商就选择 vu ...