前言 反射是程序校验自己数据结构和类型的一种机制.文章尝试解释Golang的反射机制工作原理,每种编程语言的反射模型都是不同的,有很多语言甚至都不支持反射. Interface 在将反射之前需要先介绍下接口interface,因为Golang的反射实现是基于interface的.Golang是静态类型语言,每个变量拥有一个静态类型,在编译器就已经确定,例如int,float32,*MyType, []byte等等.如果我们定义: type MyInt int var i int var j My…
前言 我博客之前的Golang高效实践系列博客中已经系统的介绍了Golang的一些高效实践建议,例如: <Golang高效实践之interface.reflection.json实践><Golang 高效实践之defer.panic.recover实践><Golang 高效实践之并发实践context篇><Golang 高效实践之并发实践channel篇> 本文将介绍一些零散的Golang高效实践建议,虽然琐碎但是比较重要. 建议 1.代码格式go fmt工…
前言 在上篇Golang高效实践之并发实践channel篇中我给大家介绍了Golang并发模型,详细的介绍了channel的用法,和用select管理channel.比如说我们可以用channel来控制几个goroutine的同步和退出时机,但是我们需要close channel通知其他接受者,当通知和通信的内容混在一起时往往比较复杂,需要把握好channel的读写时机,以及不能往已经关闭的channel中再写入数据.如果有没有一种更好的上下文控制机制呢?答案就是文章今天要介绍的context,…
原文:IntelliJ IDEA:Getting Started with Spring MVC, Hibernate and JSON实践 最近把编辑器换成IntelliJ IDEA,主要是Eclipse中处理Maven项目很不方便,很早就听说IntelliJ IDEA的大名了,但是一直没机会试试.最近终于下载安装了,由于是新手,决定尝试个Tutorials,最终找了个熟悉点的项目,就是Getting Started with Spring MVC, Hibernate and JSON(ht…
http://toutiao.com/i6256894054273909249/ 熊猫 TV 是一家视频直播平台,先介绍下我们系统运行的环境,下面这 6 大服务只是我们几十个服务中的一部分,由于并发量与重要性比较高,所以成为 golang 小试牛刀的首批高性能高并发服务.Golang在视频直播平台的高性能实践(含PPT下载)把大服务拆细, 然后服务化独立部署,更容易简化部署,也容易单点细节优化与升级.多数服务的能力是通用的,如平滑重启.多机房部署等.Golang在视频直播平台的高性能实践(含PP…
Golang面向API编程-interface(接口) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Golang并不是一种典型的面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)语言.它在语法上不支持类和继承的概念.没有继承是否就无法拥有多态行为了呢?答案是否定的,我们知道 Golang 中没有 class 的概念,而是通过 interface 类型转换支持在动态类型语言中常见的“鸭子类型”达到运行时多态的效果. 一.什么是in…
一.软件源维护 1. 基本操作 (1)查看源列表 sudo vim /etc/apt/sources.list deb:二进制软件安装包 deb-src:源码包 (2)备份软件源列表 sudo cp /etc/apt/source.list /etc/apt/backup_source.list (3)更新源 sudo apt-get update (4)升级源 sudo apt-get upgrade (5)通过关键字查找安装包 sudo apt-cache search [软件名] (6)安…
机器学习是近年来渐趋热门的一个领域,同时Python 语言经过一段时间的发展也已逐渐成为主流的编程语言之一.<Python机器学习实践指南>结合了机器学习和Python 语言两个热门的领域,通过利用两种核心的机器学习算法来将Python 语言在数据分析方面的优势发挥到极致. 共有10 章.第1 章讲解了Python 机器学习的生态系统,剩余9 章介绍了众多与机器学习相关的算法,包括各类分类算法.数据可视化技术.推荐引擎等,主要包括机器学习在公寓.机票.IPO 市场.新闻源.内容推广.股票市场.…
前言 在我前面一篇文章Golang受欢迎的原因中已经提到,Golang是在语言层面(runtime)就支持了并发模型.那么作为编程人员,我们在实践Golang的并发编程时,又有什么需要注意的点呢?下面我会跟大家详细的介绍一些在实际生产编程中很容易踩坑的知识点. CSP 在介绍Golang的并发实践前,有必要先介绍简单介绍一下CSP理论.CSP,全称是Communicating sequential processes,翻译为通信顺序进程,又翻译为交换消息的顺序程序,用来描述并发性系统的交互模式.…
前言 我们知道Golang处理异常是用error返回的方式,然后调用方根据error的值走不同的处理逻辑.但是,如果程序触发其他的严重异常,比如说数组越界,程序就要直接崩溃.Golang有没有一种异常捕获和恢复机制呢?这个就是本文要讲的panic和recover.其中recover要配合defer使用才能发挥出效果. Defer Defer语句将一个函数放入一个列表(用栈表示其实更准确)中,该列表的函数在环绕defer的函数返回时会被执行.defer通常用于简化函数的各种各样清理动作,例如关闭文…
前言 Golang的slice类型为连续同类型数据提供了一个方便并且高效的实现方式.slice的实现是基于array,slice和map一样是类似于指针语义,传递slice和map并不涉及底层数据结构的拷贝,相当于传递底层数据结构的指针. Arrays数组 数组类型的定义需要指定长度和元素的类型.例如,[4]int表示一个四个整数的数组.数组的大小是固定的,数组的大小是类型的一部分,也就是说[4]int 和 [5]int是不同的类型,不能比较.数组可以按序号索引访问,从0开始,s[n]表示访问第…
基于 Vue.js 之 iView UI 框架非工程化实践记要   像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引用一下,不需要就删除.故观念使然,尽管 Nuget 和 Maven 用得顺溜,但对 NPM 仍不带感,兴许是周边无人带动的稀薄气氛,也或者是没参加过类似的大型活动,于是在自发性上差了许多.再者,我不用 MVVM 模式,领导也不会扣绩效. 为了快速体验 MVVM 模式,我选择了非工程化方式来起步,并选…
在golang中package是个困惑的概念, 特别是package还可以与folder不同名, 委实让我恶心了一把. 关于golang的package的最佳实践: package is folder. package name is folder name. package path is folder path. 信耶稣得永生!   1. 同一个folder存在不同package, 编译错误: D:/go/bin/go.exe build [E:/cgss/src/pkg01] can't…
当前git是大部分开发团队的首选版本管理工具,一个好的流程规范可以让大家有效地合作,像流水线一样有条不紊地进行团队协作. 业界包含三种flow: Git flow Github flow Gitlab flow 下面我们先来分析,然后再基于gitlab flow来设计一个适合我们团队的git规范. 从git flow到gitlab flow git flow 先说git flow,大概是这样的. 然后,我们老的git规范是参考git flow实现的. 综合考虑了开发.测试.新功能开发.临时需求.…
看到有个例子实现了一个类似于核弹发射装置,在发射之前还是需要随时能输入终止发射. 这里就可以用到cahnnel 配合select 实现多路复用. select的写法用法有点像switch.但是和switch不同的是,select的一个case代表一个通信操作(在某个channel上进行发送或者接收)并且会包含一些语句组成的一个语句块.现在让我们来实现一下这个核弹发射器 package main import ( "fmt" "time" "os"…
本篇体验在ASP.NET MVC下使用Knockout,将使用EF Code First创建数据库.最后让Knockout绑定一个Json对象. 创建一个领域模型. namespace MvcApplication3.Models { public class Product { public int Id { get; set; } public string Name { get; set; } public string Category { get; set; } public deci…
有些场景使用多维哈希来存储数据,时间复杂度恒定,简单粗暴好用.这里记录一下. 如下是三维哈希的简单示意图,建议层数不要太多,否则时间久了,自己写的代码都不认识. 下图是三维哈希在内存的存储形式,hashmap嵌套了3层.图里一层数组存放entry和链表next指针,每个节点里面都存放一个数组,数组存放下一层hashcode和下一层链表指针.(没有将哈希分桶链表完整画出来,本图重点是哈希嵌套) 这个数据结构我是用来解析保存不同设备的配置,每个设备有两个配置文件.当新来一个该设备的数据(base64…
Asp.Net端: JsonHelper.cs using System.Runtime.Serialization.Json; using System.IO; using System.Text; namespace NetJSON { /// <summary> /// JSON序列化和反序列化辅助类 /// </summary> public class JsonHelper { /// <summary> /// JSON序列化 /// </summar…
通过NHibernate我们多表查询是实现了 但由于查询出来的集合中的对象“不是平的”,如何在送到UI绑定成了问题.ExtJs UI组件的数据绑定支持多种格式,如简单数组,Json,Xml.在本项目中我们统一,服务器端通过Json把数据传输到Ext进行解析和绑定. 那么我们现在只需要找个方便的办法把我们的.Net对象(集合)转化为Json格式的字符串就可以了.于是乎我们google了一下发现.Net下还真有这么个方法能把.Net对象序列化成Json字符串new System.Web.Script…
熊猫 TV 是一家视频直播平台,先介绍下我们系统运行的环境,下面这 6 大服务只是我们几十个服务中的一部分,由于并发量与重要性比较高,所以成为 golang 小试牛刀的首批高性能高并发服务. 把大服务拆细, 然后服务化独立部署,更容易简化部署,也容易单点细节优化与升级.多数服务的能力是通用的,如平滑重启.多机房部署等. 关于在线服务,如果 1000 万用户在线,即使每 30 秒一次在线 http 发送打点,那么也有每秒 30 万+的接口 qps. Golang 提供的 http server 性…
https://mp.weixin.qq.com/s/k8WNWpCIVl4xTmP3TQ_gxQ…
再次梳理一下面向对象编程的要点. 此文是以php为例,但思想是通用的. 总结的PHP面向对象编程笔记 对象的基本概念 对象的基本构成 对象包含两部分 一.对象的组成元素 是对象的数据模型,用于描述对象的数据. 又被称为对象的属性,或对象的成员变量. 二.对象的行为 是对象的行为模型,用于描述对象能够做什么. 又被称为对象的方法. 对象的特点 1 每个对象都是独一无二的 2 对象是一个特定事物,他的职能是完成特定功能 3 对象是可以重复利用的 面向对象的基本概念 面向对象就是在编程的时候数据结构形…
cnblogs原创 golang自带的json解析库encoding/json提供了json字符串到json对象的相互转换,在json字符串比较简单的情况下还是挺好用的,但是当json字符串比较复杂或者嵌套比较多的时候,就显得力不从心了,不可能用encoding/json那种为每个嵌套字段定义一个struct类型的方式,这时候使用simplejson库能够很方便的解析.例如,有这样一个嵌套很深的json字符串,例子如下: { "rc": 0, "error": &q…
参考了这篇帖子:golang protobuf从生成的json标记中删除omitempty标记 由于是在windows上开发,因此写了一个python脚本来解决: remove_tag.py import sys def main(): argc = len(sys.argv) if argc<2: print('usage:%s <xxx.go>'%sys.argv[0]) return f = open(sys.argv[1], 'rb') if not f: print("…
一.SSH服务 1. 安装SSH (1)查看是否已经安装过ssh服务 rpm -qa |grep ssh (2)进行安装 sudo apt-get install openssh-server Ubuntu缺省安装了openssh-client,如果没有输入: sudo apt-get install openssh-client 2. 运行SSH服务 (1)开启SSH /etc/init.d/ssh start (2)验证启动成功 ps -e | grep sshd (3)查看ssh服务状态…
func getJSON(sqlString string) (string, error) { stmt, err := db.Prepare(sqlString) if err != nil { return nil, err } defer stmt.Close() rows, err := stmt.Query() if err != nil { return nil, err } defer rows.Close() columns, err := rows.Columns() if…
一.Linux基础实践 1.1 1. 掌握软件源的维护方法,配置系统使用软件源镜像.掌握通过软件源来查找,安装,卸载,更新软件的方法. 这部分内容在许多学长学姐的报告里都有很详细的讲解,我在此就不赘述了. 1.2 1. 掌握Linux权限管理的概念.掌握与权限管理相关的9bit的含义与设置方法. Linux权限管理:Linux是一个多用户多任务操作系统,即可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务.为保证互不影响,Linux进行文件权限划分与管理,每个用…
摘要 类型转换在程序设计中都是不可避免的问题.当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关 注这方面的问题.但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事.我之所以说通常需要手动转换,是 因为interface类型作为一个特例,会有不同的处理方式. 类型转换在程序设计中都是不可避免的问题.当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要 去关注这方面的问题.但是golang中的类型匹配是很严格的,不同的类型之间通常需要…
如果你是一个Android开发工程师,学会解析Json字符串是你的必修课,本篇文章主要以实例的方式手把手教你怎么做,花五分钟时间阅读本篇文章你就可以学会解析所有的Json字符串啦. 准备: json字符串 fastjson HiJson格式化json工具 开始教程: fastjson: 常用工作中解析json的工具类有谷歌的GSON,jackson,fastjson,这里就不做一一比较了,博主告诉大家,fastjson就是最高效最好用的,选它就没错了.FastJson出自阿里工程师之手,是一个J…
Golang最重要的接口,,,, package main import ( "fmt" ) //interface类型默认是指针 /* 接口的实现 Golang中的接口,不需要显示的实现.只需要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口 因为Golang中没有implement类似的关键字 如果一个变量含有了多个interface类型的方法,那么这个变量就实现了多个接口 如果一个变量只含有了1个interface的部分方法,那么这个变量没有实现这个接口.. 一种事…