golang
代码界的小姑娘
这个作者很懒,什么都没留下…
展开
-
golang设计模式之建造者模式
建造者模式一个Builder类会一步一步构造最终的对象,该Builder类是独立于其他对象的主要解决在软件系统中,有时候面临一个复杂对象的创建工作,通常这个复杂对象由各个部分的子对象用一定的算法构建成。由于需求的变化,这个复杂对象的各个部分通常会出现巨大的变化,所以,将各个子对象独立出来,容易修改实现建造所有产品的接口type Builder interface { Process1() Process2() Process3()}实现具体的产品type IntBuilder原创 2020-11-15 18:00:46 · 191 阅读 · 0 评论 -
golang设计模式之原型模式
原型模式原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。实现定义一个原型对象需要实现的接口//原型对象需要实现的接口//拷贝原有的数据type CloneAble interface { Clone() CloneAble}实现一个原型管理类func NewProtoTypeManager() *Prot原创 2020-11-15 16:34:29 · 279 阅读 · 0 评论 -
golang设计模式之工厂模式
1.简单工厂模式通过参数的方式创建产品,在增加一个新的类型时,除了要增加新的类和方法之外,还需要修改工厂函数,在工厂函数中添加case,这一点违背了对修改关闭这个原则(开放-封闭原则)。//抽象的产品type SuperMarket interface { GetGoods()}//参数的方式创建产品func NewSupermarket( name string) SuperMarket { switch name { case "s": return &Snacks{}原创 2020-11-08 17:10:17 · 349 阅读 · 0 评论 -
golang设计模式之单例模式
golang设计模式之单例模式核心作用保证一个类只有一个实例,并且提供一个访问该实例的全局访问点优点由于单例模式只生成一个实例,减少系统性能开销,当一个对象的生产需要比较多资源时,就可以通过在应用启动的时候直接产生一个单例对象,然后永久驻留内存,例如日志模块单例模式可以在系统设置全局访问点,优化资源共享问题,比如数据库里连接池简单实现type Singleton struct {}var singleton *Singletonvar once sync.Oncefunc G原创 2020-11-07 21:54:21 · 244 阅读 · 0 评论 -
golang-redis之set类型简单操作
1:安装redigogo get github.com/garyburd/redigo/redis2:连接redisimport ( "github.com/garyburd/redigo/redis")c, err := redis.Dial("tcp", "192.168.2.225:6379")if err != nil { fmt.Println("connect to原创 2017-11-25 20:39:17 · 8034 阅读 · 0 评论 -
golang-redis之hash类型简单操作
1:安装redigogo get github.com/garyburd/redigo/redis2:import redigoimport ( "github.com/garyburd/redigo/redis")3:连接redisc, err := redis.Dial("tcp", "192.168.2.225:6379")if err != nil { fmt.Print原创 2017-11-25 20:53:24 · 20743 阅读 · 0 评论 -
golang-redis之sorted set类型简单操作
1:安装redigogo get github.com/garyburd/redigo/redis2:引用redigoimport ( "github.com/garyburd/redigo/redis")3:连接Redisc, err := redis.Dial("tcp", "192.168.2.225:6379")if err != nil { fmt.Println("c原创 2017-11-25 21:22:40 · 10098 阅读 · 1 评论 -
golang操作redis出现的错误解决
1:failed redigo: unexpected type for String, got type int64 解决:操作incr,incrby,decr,decyby时,不需要加上redis.String,因为操作类型是int64类型,加上redis.String,类型不相符合2:cannot range over unino (type interface {}) 解决:获取的值类型原创 2017-11-25 21:30:21 · 10531 阅读 · 0 评论 -
golang调用lua脚本
上篇文章已经讲过golua如何安装,本篇文章主要讲解golang如何利用golua调用lua脚本 1:importimport "github.com/aarzilli/golua/lua"2:调用lua脚本的几个重要函数L := lua.NewState() //创建一个lua虚拟机L.DoFile("./xxx") //设置要调用的lua文件L.GetField(lua.LUA_GL原创 2017-12-23 13:29:06 · 15474 阅读 · 1 评论 -
golang封装的log日志库
1:支持日志按大小分文件(文件大小支持用户自定义,默认50*1024*1024) 2:支持按照用户自己的实际情况选择每天文件保存的数量(默认10) 3:支持每天凌晨定时创建日志文件夹 4:支持动态设定定期删除过期的文件(日志保存时间支持用户自定义,默认两日) 5:支持输出文件名行号,以及时间、日志界别测试结果: github路径原创 2018-01-22 23:27:55 · 4610 阅读 · 0 评论 -
golang-redis之list类型简单操作
1:安装redigogo get github.com/garyburd/redigo/redis2:连接redis(通过ip端口)import ( "github.com/garyburd/redigo/redis")c, err := redis.Dial("tcp", "192.168.2.225:6379")if err != nil { fmt.Println("co原创 2017-11-25 18:40:41 · 12288 阅读 · 0 评论 -
golang调用lua脚本之安装golua
golua按照普通go的驱动安装,由于使用了cgo编译,所以是无法安装成功的 1:下载(已共享) 链接:https://pan.baidu.com/s/1slHnN0T 密码:8f66 分别下载golua-master.zip、lua-5.1.4.tar.gz、ncurses-5.9.tar.gz、readline-6.2.tar.gz 2:安装ncurses-5.9.tar.gz、read原创 2017-12-11 22:04:21 · 3094 阅读 · 2 评论 -
golang之string标准库(三)
1:TrimLeftFunc(c string,f func(rune) bool)string:根据自定义函数来删除字符串左边的字符左边func split(s rune) bool { if s == 'n' { return true } return false}fmt.Println("TrimLeftFunc", strings.TrimLef原创 2017-12-03 19:15:39 · 749 阅读 · 1 评论 -
gloang之嵌入类型
gloang之嵌入类型 嵌入类型是将已有的类型直接声明在新的结构类型中,被嵌入的类型被称为外部类型的内部类型,通过嵌入类型,与内部类型相关的标识符会提升到外部类型上“` package mainimport ( “bytes” “encoding/binary” “fmt” )type User struct { Name int32 Age原创 2017-10-22 15:50:24 · 321 阅读 · 0 评论 -
golang之测试和性能
1:单元测试 要求:1:文件必须以*_test.go命名,这样在执行go test的时候才会执行到相应的代码 2:你必须import testing这个包 3:函数命名必须以Test*命名 4:命令:go test -v 示例:package testimport ( "fmt" "testing")type user原创 2017-10-23 22:17:05 · 1894 阅读 · 0 评论 -
golang-Http操作错误
错误1:”parse json error invaild character ‘<’ looking for beginning of value”(如下图所示) 解决:检查url是否正确,一般出现这个问题就是因为url错误,返回的是html页面,所以有‘<’的提示。如果url正确,检查参数是否传递正确,如果参数错误,也将导致出现的结果与预期不相符合错误2:http请求Get的信息,解析js原创 2017-11-18 17:54:35 · 1311 阅读 · 0 评论 -
centos安装golang、protobuf
golang安装 : 1:https://www.golangtc.com/static/go/1.9.2/ 选择对应版本下载(go1.9.2.linux-amd64.tar.gz) 2: tar xzvf go1.9.2.linux-amd64.tar.gz -C /usr/local/ 3:vim etc/profile(添加环境变量) export GOPATH = /usr原创 2017-11-13 22:32:24 · 3372 阅读 · 0 评论 -
golang使用protobuf
file.protopackage file;enum PHP_MSG_ID{ PHP_MSG_CHANGE_SAFEPWD = 11; PHP_MSG_BROADCAST = 12; PHP_MSG_SYS_NOTICE = 13; PHP_MSG_KILL_PLAYER = 14; PH原创 2017-11-13 22:56:09 · 596 阅读 · 1 评论 -
golang-mysql数据库简单操作
1:安装golang数据库操作的第三方数据库操作驱动sudo go get github.com/go-sql-driver/mysql2:连接数据库操作函数Open() – creates a DB连接Close() - closes the DB连接函数原型func Open(driverName, dataSourceName string) (*DB, error)driverName:原创 2017-11-19 10:35:39 · 3220 阅读 · 0 评论 -
golang-redis之string类型简单操作
1:安装redigogo get github.com/garyburd/redigo/redis2:连接redis(通过ip端口)c, err := redis.Dial("tcp", "192.168.2.225:6379")if err != nil { fmt.Println("connect to redis err", err.Error()) return}def原创 2017-11-20 22:50:36 · 3426 阅读 · 0 评论 -
golang之string标准库(一)
1:Contains(s,substr string) bool:字符串s是否包含substr,包含返回true,不包含返回false flag := strings.Contains("hello world", "wor") if flag { fmt.Println("str is contain substr") } else { fmt原创 2017-12-03 18:39:41 · 829 阅读 · 0 评论 -
golang之string标准库(二)
1:Field(s string)[]string:以1个或多个空格字符串,分割字符串,返回所有子串,如果父串是空,则返回空串 str = "helloworld hellogolang helloprograming hellotest hellostring hello" newstr := strings.Fields(str) fmt.Println("Fie原创 2017-12-03 19:02:24 · 2273 阅读 · 0 评论 -
golang入门基础
1:函数实现(传值接受者和传指针接受者的使用场景) 传值:——》副本 只读,不可修改 传指针:—-》引用,可修改 2:命名:字母或下划线开头 3:可见性与不可见 命名首字母大写:包内包外均可见 命名首字母小写:只在包内可见 4:变量定义初始化几种方式 var 变量名 类型 = 表达式 var 变量名 = 表达式 变量名 :原创 2017-10-28 17:02:57 · 306 阅读 · 0 评论