golang

(三十)golang--面向对象

有些话、适合烂在心里 提交于 2019-12-05 07:20:12
首先我们要明确: golang并不是纯粹的面向对象的编程语言; golang没有类class,使用struct代替; golang面向对象编程非常简洁,去掉了传统的继承、重载、构造函数和析构函数、隐藏的this指针等; golang仍然有面向对象编程的继承、封装和多态的特性,只是实现的方法和其他oop语言不一样; golang耦合性低,非常灵活;面向接口编程是非常重要的特性; 从这可以看出,结构体其实是我们自己定义的数据类型;结构体变量是具体的,实际的,代表一个具体变量; 结构体在内存中的布局: 来源: https://www.cnblogs.com/xiximayou/p/11913442.html

Golang interface 判断 是否等于 nil

寵の児 提交于 2019-12-05 06:49:06
package main import "fmt" type I interface{ Print() } type A struct{} func(a *A) Print(){} func New1() I{ var a *A = nil return a } func New2() I{ var a I = nil return a } func main(){ a := New1() if a == nil { fmt.Println("a is nil") }else{ fmt.Println("a is not nil") //执行 } b := New2() if b == nil { fmt.Println("b is nil") //执行 }else{ fmt.Println("b is not nil") } }   Golang的interface 要值和类型都为nil 才等于 nil,所以判断返回值的时候要小心 来源: https://www.cnblogs.com/5566blh/p/11911530.html

golang 创建超过10万个Go程时报错stackcacherefill

坚强是说给别人听的谎言 提交于 2019-12-05 06:44:29
package main import( //"fmt" "time" ) var c = make(chan int,100) func gofunc(){ time.Sleep(0) c<-0 } func main(){ for i:=0;i<10;i++{ for j:=0;j<10000;j++{ go gofunc() } time.Sleep(time.Second) } } fatal error: out of memory (stackcacherefill) runtime stack: runtime.throw(0x45f820) c:/go/src/pkg/runtime/panic.c:520 +0x71 stackcacherefill() c:/go/src/pkg/runtime/stack.c:52 +0x87 runtime.stackalloc(0x12219360, 0x4000) c:/go/src/pkg/runtime/stack.c:124 +0x154 mstackalloc(0x11514000) c:/go/src/pkg/runtime/proc.c:1754 +0x43 runtime.mcall(0x423794) c:/go/src/pkg/runtime/asm_386.s:190 +0x40 来源:

GoLang环境配置

北战南征 提交于 2019-12-05 06:42:48
这两天抽空把Go Lang的语法看完,总体感觉语言简介,性能强大。 感受最深就是里面的匿名字段引用,不管是struct还是的interface,还是嵌套引用,这些都是非常的完美和优雅。 准备接下用beego来开发一下Blog系统,算作是练习。 beego框架简单明了,从项目的建立与发布都一套完整的流程,算是给新手很好的练习~ 1、安装 根据自己的系统选择下载哪个版本,下载地址:http://www.golangtc.com/download 以win为例,下载msi,安装完后,会系统环境变量里自动添加go目录,可以在cmd下,直接输入go检测 如果是Linux或Mac,要进行环境配置GOROOT, export导入一下 这里说一下goroot和gopath,对初学者这两个目录有些人不太明白 goroot是go的安装目录路径 gopath是工作路径目录,所以下载的项目都要放在src下 Windows环境变量: GOROOT D:\Program Files\Go\ GOPATH D:\Program Files\Gopath PATH里追加: ;D:\Program Files\Go\bin; 2、开发工具 用的是专门为go语言开发的一个工具-LiteIDE,小而强大 3、语法学习 golang的语言基础看的是: https://github.com/astaxie/build

supervisor运行golang守护进程

非 Y 不嫁゛ 提交于 2019-12-05 06:42:39
Supervisor是一个C/S系统,它可以在类UNIX系统上控制系统进程,由python编写,它提供了大量的功能来实现对进程的管理。 程序的多进程启动,可以配置同时启动的进程数,而不需要一个个启动 程序的退出码,可以根据程序的退出码来判断是否需要自动重启 程序所产生日志的处理 进程初始化的环境,包括目录,用户,umask,关闭进程所需要的信号等等 手动管理进程(开始,启动,重启,查看进程状态)的web界面,和xmlrpc接口 支持的平台 可以运行在大多数类UNIX系统上,比如Linux、MAC OS X、Solaris、FreeBSD。 不支持任何版本的Windows。 支持Python2.4以及之后的版本,但不支持Python3。 安装supervisor pip pip install supervisor easy_install easy_install supervisor apt-get (Debian/Ubuntu) apt-get update apt-get install supervisor #默认配置文件在/etc/supervisor/supervisord.conf yum (Centos) yum install supervisor golang http服务 先整一个简单的golang http服务 package main import (

(二十七)golang-排序和查找

老子叫甜甜 提交于 2019-12-05 04:58:11
排序:将一组数据,依据指定的顺序进行排列 (1)内部排序:将数据加载在内存中进行排序; 交换排序(冒泡排序,快速排序) 冒泡排序实现: 快速排序实现 (2)外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储 来源: https://www.cnblogs.com/xiximayou/p/11908084.html

golang channel 用法

给你一囗甜甜゛ 提交于 2019-12-05 03:30:57
golang channel 用法转的 一、Golang并发基础理论 Golang在并发设计方面参考了C.A.R Hoare的CSP,即Communicating Sequential Processes并发模型理论。但就像John Graham-Cumming所说的那样,多数Golang程序员或爱好者仅仅停留在“知道”这一层次,理解CSP理论的并不多,毕竟多数程序员是搞工程 的。不过要想系统学习CSP的人可以从 这里 下载到CSP论文的最新版本。 维基百科 中概要罗列了CSP模型与另外一种并发模型Actor模型的区别: Actor模型广义上讲与CSP模型很相似。但两种模型就提供的原语而言,又有一些根本上的不同之处: – CSP模型处理过程是匿名的,而Actor模型中的Actor则具有身份标识。 – CSP模型的消息传递在收发消息进程间包含了一个交会点,即发送方只能在接收方准备好接收消息时才能发送消息。相反,actor模型中的消息传递是异步 的,即消息的发送和接收无需在同一时间进行,发送方可以在接收方准备好接收消息前将消息发送出去。这两种方案可以认为是彼此对偶的。在某种意义下,基于交 会点的系统可以通过构造带缓冲的通信的方式来模拟异步消息系统。而异步系统可以通过构造带消息/应答协议的方式来同步发送方和接收方来模拟交会点似的通信 方式。 – CSP使用显式的Channel用于消息传递

Martini 极好的 Go WEB 框架

a 夏天 提交于 2019-12-05 03:30:18
已知的其他框架看到的是传统OOP的影子, 到处充蚀 Class 风格的 OOP 方法. 而我们知道GoLang中是没有Class的. 笔者也曾努力用Go 的风格做WEB开发, 总感到力不从心. 写出的代码不能完全称之为框架, 到更像一个拷贝源码使用的应用. 要达到灵活需要修改源码. 直到看到了 Martini . 纯 GoLang 风格的框架出现了. 核心Injector Injector 是 Martini 的核心. 其代码非常简洁. 功能仅仅是通过反射包, 对函数进行参数类型自动匹配进行调用. 笔者曾经为完成类似的功能写了 typeless , 这是一个繁琐的高成本的实验品. Injector 把事情简单化了, Injector 假设函数的参数都具有不同的类型. 在WEB开发中的 HandlerFunc 通常都具有这样的形式. 因此通过反射包可以对参数进行自动的匹配并调用HandlerFunc, 当然事先要把所有可能使用到的参数 Map/MapTo 给 Injector 对象, 这很容易而且是可以预见的. 简洁的路由设计 Martini的路由 router.go 写的非常简洁实用, 可见作者使用正则的功力非常深厚. 举例: "/wap/:category/pow/**/:id" 匹配: "/wap/Golang/pow/Path1/ToPathN/Foo" 灵活的中间件

Mac下安装golang

北城以北 提交于 2019-12-05 03:17:59
前言:越来越多人开始走学习golang之路,包括我身边的一些技术同事给自己“充电”新技术,能在未来工作中更好的生存发展。 个人使用Mac环境,下面大概简述一安装过程: 一、准备工作 官网下载安装包: 备注:目前最新稳定版本是v1.9 开发工具包又分为安装版和压缩版。安装版是Mac和Windows特有的,他们的名字类似于: go1.9.darwin-amd64.pkg go1.9.windows-386.msi go1.9.windows-amd64.msi 安装版,有点傻瓜式安装,环境路径都默认好,操作起来比较简单方便。 压缩版的就是一个压缩文件,可以解压得到里面的内容,他们的名字类似于: go1.9.darwin-amd64.tar.gz go1.9.linux-386.tar.gz go1.9.linux-amd64.tar.gz Go语言的官方下载地址是 https://golang.org/dl/ 可以打开选择版本下载,或者使用镜像网站 http://mirrors.flysnow.org/ ,打开后搜索或者找到Golang,选择相应的版本下载,这个镜像网站会同步更新官方版本,基本上都是最新版,可以放心使用。 二、安装 安装1:我这里也以/usr/local/go/为例。在配置环境变量的时候,针对所有用户和Linux是一样的,都是/etc/profile这个文件;

golang之结构体结构体嵌入和匿名成员

為{幸葍}努か 提交于 2019-12-05 03:16:11
考虑一个二维的绘图程序,提供了一个各种图形的库,例如矩形、椭圆形、星形和轮形等几何形状。这里是其中两个的定义: type Circle struct {   X, Y, Radius int } type Wheel struct {   X, Y, Radius, Spokes int } 一个Circle代表的圆形类型包含了标准圆心的 X 和 Y 坐标信息,和一个 Radius 表示的半径信息。一个Wheel轮形除了包含Circle类型所有的全部成员外,还增加了Spokes表示径向辐条的数量。我们可以这样创建一个wheel变量: var w Wheel w.X = 8 w.Y = 8 w.Radius = 5 w.Spokes = 20 随着库中几何形状数量的增多,我们一定会注意到它们之间的相似和重复之处,所以我们可能为了便于维护而将相同的属性独立出来: ype Point struct {   X, Y int } type Circle struct {   Center Point   Radius int } type Wheel struct {   Circle Circle   Spokes int } 这样改动之后结构体类型变的清晰了,但是这种修改同时也导致了访问每个成员变得繁琐: var w Wheel w.Circle.Center.X = 8 w