在日常项目开发中,经常需要判断一个文件的类型,比如图片上传时,判断一个图片是否是jpg、png等。
如果单纯更改文件名的后缀取判断,这并不推荐,因为文件的后缀是可以随便修改的,如果是恶意程序伪装成.jpg图片上传,那会存在很大的安全隐患。
判断文件的真实类型就是获取文件的MIME类型,一般获取文件内容的前几个字节就可以确定它的MIME类型了。
在日常项目开发中,经常需要判断一个文件的类型,比如图片上传时,判断一个图片是否是jpg、png等。
如果单纯更改文件名的后缀取判断,这并不推荐,因为文件的后缀是可以随便修改的,如果是恶意程序伪装成.jpg图片上传,那会存在很大的安全隐患。
判断文件的真实类型就是获取文件的MIME类型,一般获取文件内容的前几个字节就可以确定它的MIME类型了。
流程控制是对程序在不同条件下的执行顺序的控制。通俗来讲,就是不同的代码在什么情况下才执行,哪些先执行,哪些后执行。
一般来说,程序代码的执行是从上往下顺序执行,但它这并不准确,如果有流程控制语句,只有当控制语句中指定条件得到满足时才执行相应的代码。
流程控制语句主要有:条件语句(if/else)、循环语句(for)、选择语句(switch/case)
运算符是程序中用于计算的符号。
算术运算符主要用于数学计算。
+、-、*、/、%分别表示加、减、乘、除、及取余数。
布尔类型的类型标识符是bool,它的值只能为: true(真)、false(假),其默认值为false。
// 声明isSunday为bool类型,默认值为 false
var isSunday bool
// 声明isSaturday变量,并赋值为true
var isSaturday bool = true
// 类型推导模式:
var isSaturday = true
// 可以缩写为
isSaturday := true
数值类型就是用来表示数字的,例如整数、小数等。
Go语言中的变量和常量是编码中不可缺少的一部分,它是用来存储程序执行过程中的值或结果。
变量是用于存储程序中的可变的值或结果。变量的命名只能有字母、数字、下划线组成,且只能由字母或下划线开头。
变量必须先声明、后使用,且声明后必须使用。
这篇文章主要介绍Go语言中的数据类型和构成要素,包括标识符、关键字、运算符、标点符号等。
和其他语言一样,开始先来个Hello,world 程序:
// 包声明
package main
// 依赖包导入
import "fmt"
// 主函数
func main() {
// 打印 Hello World !
fmt.Println("Hello World !")
}
Go语言是Google推出的一个全新的编程语言,在2009年11月正式对外发布。经过快速迭代,2012年3月28日,Go发布第⼀个正式的稳定版本。
出身名门的go语言,吸收了其他语言的特点,是一种并发的、带垃圾回收的、快速编译的语言。
defer panic recover错误处理机制java php里的反射(Reflection)类似字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。
字节序分为:大端字节序和小端字节序。
小端字节序,指一个单元在计算机中存放时按照低位在低地址,高位在高地址的模式存放;
在网络世界里,进程间的通信离不开socket,主要分为TCP Socket和UDP Socket。
下面以TCP 为例,分别写一下服务端和客户端。
这里要做的客户端和服务端,在连接建立后,都可以接收和发送消息。
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,这个标准用来替代原先的DES。AES加密数据块分组长度必须为128bit,密钥长度可以是128bit、192bit、256bit中的任意一个。
这里推荐一个 golang 的加解密库:https://github.com/forgoer/openssl
支持的加密模式有:
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
Golang官网下载地址:https://golang.org/dl/
如果打不开,这里也可以下载:https://studygolang.com/dl
ThinkGo 是一个轻量级的 Go 语言 MVC 框架,目前支持路由、中间件、控制器、请求、响应、Session、视图、日志、缓存、ORM等 web 框架应该具备的基本功能,ThinkGo致力于让代码简洁且富于表达力,帮助开发者快速构建一个 Web 应用。
前置/后置中间件RFC 5424规范。go get github.com/thinkoner/thinkgo
goquery是一个使用go语言写成的HTML解析库,可以让你像jQuery那样的方式来操作DOM文档,使用起来非常的简便。
闲话少说,直接上代码:
package main
import (
"gopkg.in/mgo.v2"
"github.com/PuerkitoBio/goquery"
"log"
"gopkg.in/mgo.v2/bson"
)
type Article struct {
Title string
Decription string
Image string
Author string
Time string
}
func main() {
getArticle()
}
func getArticle() {
//连接MongoDB数据库
session, err := mgo.Dial("")
if err != nil {
panic(err)
}
defer session.Close()
session.SetMode(mgo.Monotonic, true)
c := session.DB("test").C("article")
//使用goquery开始抓取
doc, err := goquery.NewDocument("http://weixin.sogou.com/")
if err != nil {
log.Fatal(err)
}
//编辑文章节点
doc.Find(".news-list li").Each(func(i int, contentSelection *goquery.Selection) {
//文章标题
title := contentSelection.Find(".txt-box h3 a").Text()
decription := contentSelection.Find(".txt-box .txt-info").Text()
image, _ := contentSelection.Find(".img-box img").Attr("src")
author := contentSelection.Find(".txt-box .account").Text()
time, _ := contentSelection.Find(".txt-box .s-p").Attr("t")
result := Article{}
//是否已经保存过该文章
err = c.Find(bson.M{"title": title}).One(&result)
if err != nil {
log.Println("第", i+1, "篇文章:", title)
//保存至数据库
err = c.Insert(&Article{title, decription, image, author, time})
if err != nil {
panic(err)
}
}
log.Println(result)
})
}
专业企业官网建设,塑造企业形象,传递企业价值
系统软件开发,用心思考,用心设计,用心体验
打破技术瓶颈,让不堪重负的项目起死回生
构建全渠道一体化运营能力,实现全链路数字化
文案撰写、营销策划,专注品牌全案
一站式解决企业互联网营销痛点和难题
以技术的力量,改变互联网
联系我们