Flyertutor


  • 首页

  • 归档

  • 分类

  • 标签

使用 Gin 开发博客教程一

发表于 2018-04-12 | 分类于 Go

Gin 是一个用 Go 语言开发的 Web 框架,提供类 Martini 的 API,但是性能更好。因为有了httprouter 性能提升了 40 倍之多。今天我就用它开发一个简单的博客,熟悉一下它的使用。

安装

1
go get github.com/gin-gonic/gin

安装完毕之后,会在 $GOPATH/src 目录下面找到包文件。

入门示例

1
2
3
4
5
6
7
8
9
10
11
12
13
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)

func main() {
route := gin.Default()
route.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "Hello World")
})
route.Run()
}

执行 go run main.go 之后,打开浏览器 http://localhost:8080 就可以查看效果了。

阅读全文 »

Go 使用模板

发表于 2018-04-10 | 分类于 Go

今天对 Go 使用模板来做下练习,并做下记录。

创建模板

模板使用的是系统 html/template 这个包,那么我们直接导入,进行测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"log"
"os"
"html/template"
)

func main() {

const templ = `Hello World!!!`
test, err := template.New("test").Parse(templ)
if err != nil {
log.Fatal(err)
}
if errors := test.Execute(os.Stdout, nil); errors != nil {
log.Fatal(err)
}
}

阅读全文 »

PHP 使用 ElasticSearch 做搜索

发表于 2018-04-05 | 分类于 PHP

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

在做搜索的时候想到了 ElasticSearch ,而且其也支持 PHP,所以就做了一个简单的例子做测试,感觉还不错,做下记录。

环境

php 7.2
elasticsearch 6.2 下载
elasticsearch-php 6 下载

安装 elasticsearch

下载源文件,解压,重新建一个用户,将目录的所属组修改为此用户,因为 elasticsearch 无法用 root 用户启动。

1
2
3
4
5
6
7
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz
tar zxvf elasticsearch-6.2.3.tar.gz
useradd elasticsearch
password elasticsearch
chown elasticsearch:elasticsearch elasticsearch-6.2.3
cd elasticsearch-6.2.3
./bin/elasticsearch // 启动

阅读全文 »

Laravel Policy 使用

发表于 2018-03-30 | 分类于 Laravel

Laravel 提供更简单的方式来处理用户授权动作。类似用户认证,有 2 种主要方式来实现用户授权:gates 和策略,我这里主要讲解下策略的使用。

文档 上面有详细的说明,我这里只根据自己使用过程做一个简单的笔记。

例子:我这里准备用编辑文章授权来做演示,在这个权限中,只有文章所有者可以编辑,来体验一下 Policy 如何实现它。

准备工作

安装 laravel

1
composer create-project --prefer-dist laravel/laravel laravel-vue "5.5.*"

建表

1
2
3
4
5
6
7
8
9
php artisan make:migration posts --create=posts

Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string("title", 200);
$table->text("content");
$table->timestamps();
$table->index('user_id');
});

阅读全文 »

Laravel5.5 + Vue开发单页应用

发表于 2018-03-22 | 分类于 Laravel

上次我用 laravel5.3 + Vue 开发了一个简单的单页应用,这次我打算将其升级到 laravel5.5,在升级的过程中,做一下记录,其源码放在 github 上面,源码地址

开发环境

软件包 版本
Laravel 5.5
Vue > 2.5.7
axios > 0.17
vue-router > 3.0.1
vuex > 3.0.1

安装

1
2
3
4
5
# 安装 laravel
composer create-project --prefer-dist laravel/laravel laravel-vue "5.5.*"

# 安装前端依赖包
npm install

安装完之后,为了便于开发,使用热更新模式。

1
2
3
4
5
6
7
8
9
10
# 在 webpack.mix.js 中添加配置
mix.browserSync({
proxy: 'localhost:8000'
});

# 执行 `php artisan serve`
php artisan serve

# 执行 npm run watch
npm run watch

打开浏览器访问 http://localhost:3000 就可以看到 laravel 的欢迎页面了

阅读全文 »

Go Slice 和 Map

发表于 2018-03-18 | 分类于 Go

Slice

一个slice由三个部分构成:指针、长度和容量。
指针指向第一个slice元素对应的底层数组元素的地址,要注意的是slice的第一个元素并不一定就是数组的第一个元素。
长度对应slice中元素的数目;
长度不能超过容量,容量一般是从slice的开始位置到底层数据的结尾位置。
内置的len和cap函数分别返回slice的长度和容量。

定义

切片其实就是可变长的数组,在定义的时候,不定义其长度,但是可以指定其最大长度。

1
2
var stu []string
var stu = make([]string, 5) // 指定最大长度

在定义的时候,可以初始化,初始化多少个元素,那么他的最大长度就是多少

1
2
var stu []string{"a", "b", "c"}
fmt.Printf("len=%d, cap=%d\n", len(stu), cap(stu))

阅读全文 »

PHP yield 读取大文件

发表于 2018-03-15 | 分类于 PHP

今天来优化下读取大文件,在 PHP 读取大文件的时候,经常会出现内存不足的情况,如果文件过大的话,没法一次读取完,今天采用 yield 来实现大文件的读取。

老式读取方式

1
2
3
4
5
6
7
8
9
10
function readLocalFile($fileName)
{
$handle = fopen($fileName, 'r');
$lins = [];
while (!feof($handle)) {
$lines[] = fgets($handle);
}
fclose($handle);
return $lines;
}

yield 读取方式

使用 yield 的特性,来读取大文件

1
2
3
4
5
6
7
8
function readYieldFile($fileName)
{
$handle = fopen($fileName, 'r');
while (!feof($handle)) {
yield fgets($handle);
}
fclose($handle);
}

阅读全文 »

安装 PHP7

发表于 2018-03-12 | 分类于 PHP

今天倒腾 php7 ,想在一台 centos7 的服务器上面安装,这里我采用的是源码编译的方式进行安装。

源码编译安装,必须要安装 gcc 编译环境,安装方法自行搜索查找。

下载

下载地址 上面找到对应版本,进行下载,下载完之后解压。

1
2
3
wget http://cn2.php.net/distributions/php-7.1.15.tar.gz
tar -zxvf php-7.1.15.tar.gz
cd php-7.1.15

阅读全文 »

Vue 不同环境配置 API 地址

发表于 2018-03-09 | 分类于 Vue

我使用的是 Vue + ElementUI 进行构建的项目,在开发过程中,使用的是前后端分离的模式,所以经常会出现多环境配置信息,尤其是 Api 接口地址的配置,如果在代码中使用判断的方式,感觉不友好。

如果你使用的是 webpack,下面我来介绍一种方法可能会帮助到你:

使用 DefinePlugin 来根据不同的环境设置不同的配置信息,具体参考

在 build 目录下面找到

1
2
webpack.dev.conf.js
webpack.prod.conf.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# webpack.dev.conf.js
...
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/dev.env'),
'process.api': "'http://www.dev.com/'" // 注意这里的写法
})
]
...

# webpack.prod.conf.js
...
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/dev.env'),
'process.api': "'http://www.prod.com/'" // 注意这里的写法
})
]
...

按照上面方式配置完毕之后,之后你就可以在项目中使用 process.api 进行调用了,打包的时候,会读取不同的配置信息,这样是不是很方便。

如果你有更好的方法,请在下面评论中留言。

©版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 & 作者信息。

End

firstOrCreate、firstOrNew、updateOrCreate 方法使用

发表于 2018-03-03 | 分类于 Laravel

在日常开发的过程中,经常会遇到判断一条记录是否存在、存在更新、不存在新建记录这种场景,在 Laravel 中提供了方法支持,那么下面就看下具体的方法;

使用时请注意版本,下面介绍的函数 firstOrCreate 和 firstOrNew 跟版本有很大的关系

firstOrCreate

firstOrCreate 方法将会使用指定的字段 => 值对,来尝试寻找数据库中的记录。如果在数据库中找不到,5.3 以下版本会使用属性来添加一条记录,5.3 及以上版本则将使用第一个参数中的属性以及可选的第二个参数中的属性插入记录

用法:

1
2
User::firstOrCreate(['name' => 'Lisi']);
User::firstOrCreate(['name' => 'Lisi'], ['age' => 20]); // 5.3及以上版本支持

查看源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 小于 5.3 版本,只有一个参数
public function firstOrCreate(array $attributes)
{
if (! is_null($instance = $this->where($attributes)->first())) {
return $instance;
}
$instance = $this->model->newInstance($attributes);
$instance->save();
return $instance;
}

# 5.5 版本
public function firstOrCreate(array $attributes, array $values = [])
{
// 判断是否存在,如果存在,返回实例
if (! is_null($instance = $this->where($attributes)->first())) {
return $instance;
}

// 不存在创建,此代码简化就是 $this->newModelInstance($attributes + $values)->save();
return tap($this->newModelInstance($attributes + $values), function ($instance) {
$instance->save();
});
}

阅读全文 »
123…8
Flyertutor

Flyertutor

一个PHP爱好者

78 日志
9 分类
16 标签
GitHub
© 2018 Flyertutor
由 Hexo 强力驱动
主题 - NexT.Gemini