CentOS、Ubuntu、Debian 的区别
第一篇Linux 有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社群维护的免费发行版本。商业版本以 Redhat 为代表,开源社群版本则以 debian 为代表。这些版本各有不同的特点,在不同的应用领域发挥著不同的作用,不能一概而论。而绝大多数 VPS 上只提供开源社群维护的发行版本。下面就这些不同的 Linux 发行版进行简单的分析。UbuntuUbuntu 近些年的粉丝越来越多,Ubuntu 有著漂亮的使用者介面,完善的包管理系统,强大的站群软件源支援,丰富的技术社群,Ubuntu 还对大多数硬体有著良好的相容性,包括最新的图形显示卡等等。这一切让 Ubuntu 越来越向大众化方向发展。但别忘了:你所需要的只是一个简约、稳定、易用的站群服务器系统而已!Ubuntu 的图形介面固然漂亮,但这也决定了它最佳的应用领域是桌面操作系统而非站群服务器操作系统。如何你希望在学习 Linux 的过程中有个沉浸式的环境,那么 Ubuntu 的确不错:仅仅安装在自己的电脑中而非站群服务器中。从这一点来讲,Ubuntu 并没有在 VPS 安装的操作系统选择之列,相信你也不会为了那数百 M 的驱动与宝贵的内存买单。CentOS你会发现非常多的商业公司部署在生产环境上的站群服务器都是使用的 CentOS 系统,CentOS 是从 RHEL 原始码编译的社群重新发布版。CentOS 简约,命令列下的人性化做得比较好,稳定,有著强大的英文文件与开发社群的支援。与 Redhat 有著相同的渊源。虽然不单独提供商业支援,但往往可以从 Redhat 中找到一丝线索。相对 debian 来说,CentOS 略显体积大一点。是一个非常成熟的 Linux 发行版。Debian一般来说 Debian 作为适合于站群服务器的操作系统,它比 Ubuntu 要稳定得多。可以说稳定得无与伦比了。debian 整个系统,只要应用层面不出现逻辑缺陷,基本上固若金汤,是个常年不需要重启的系统(当然,这是夸张了点,但并没有夸大其稳定性)。debian 整个系统基础核心非常小,不仅稳定,而且占用硬碟空间小,占用内存小。128M 的 VPS 即可以流畅执行 Debian,而 CentOS 则会略显吃力。但是由于 Debian 的发展路线,使它的帮助文件相对于 CentOS 略少,技术资料也少一些。由于其优秀的表现与稳定性,Debian 非常受 VPS 使用者的欢迎。此外还有 Arch Linxu、Gentoo、Slackware 等一系列的 Linux 和 FreeBSD、Unix 等系统,由于其涉及领域更加专业,很少在 VPS 中出现,因此不作介绍。对于初学者,我们建议采用 CentOS 或 Debian,这两种系统都能在配置较低的 VPS 上流畅执行。但是如果 VPS 配置太低(OPENVZ 内存在 128M 以下,或者 XEN 架构内存在 192M 以下),建议采用 Debian;否则建议采用 CentOS,以获取更多的线上帮助与支援,让自己入门更轻松。第二篇CentOS、Ubuntu、Debian 三个 linux 都是非常优秀的系统,开源的系统,也分付费的商业版和 free 免费版本,下面简单比较这三种系统。CentOS 系统很多网站 WP 站长一般都选择 centOS 系统,CentOS 是从 redhat 原始码编译重新发布版。CentOS 去除很多与站群服务器功能无关的应用,系统简单但非常稳定,命令列操作可以方便管理系统和应用,并且有帮助文件和社群的支援。Ubuntu 系统Ubuntu 有亮丽的使用者介面,完善的包管理系统,强大的站群软件源支援,丰富的技术社群,并且 Ubuntu 对计算机硬体的支援好于 centos 和 debian,相容性强,Ubuntu 应用非常多,但对于站群服务器系统来说,个人感觉并不需要太多的各种应用程式,需要的是稳定,操作方便,维护简单的系统。如果你需要在站群服务器端使用图形介面,ubuntu 是一个不错的选择,你需要注意的是,图形介面占用的内存非常大,而内存越大的 vps 价格也越高。Debian 系统Debian 也非常适合做站群服务器操作系统,与 Ubuntu 比较,它没有太多的花哨,稳定压倒一切,对于站群服务器系统来说是一条不变的真理,debian 这个 linux 系统,底层非常稳定,核心和内存的占用都非常小,在小内存的 VPS 就可以流畅执行 Debian,比如 128m 的内存,但 debian 的帮助文件和技术资料比较少。对于小内存,首选 debian,对于非常熟悉 linux 系统的 vps 高手,首选 debian。在系统的选择上,属于新手,首选 CentOS,并不是 centos 比 Debian 和 ubuntu 好,而是 centos 是初学者安装 vps 的首选,它既稳定,占用资源又少,在互联网上能方便搜寻到安装配置的文件,自身的帮助文件也非常强大;如果你是 linux 高手,高手的境界一般都选择 debian,因为高手能在低配的 vps 上稳定执行系统;而 ubuntu,系统虽然免费,但它适合有钱人玩,它占用的资源是比前面两种系统更高,而 vps 基本就是卖内存,内存越高,价格越贵。我们执行著一些全球最大的网际互联网的营运,因此我们对可靠性和稳定性非常重视,是我们的第一要务。为此,我们只使用 Linux 来支撑顾客的系统。但是,我们应该使用哪一个 Linux 的发行版?答案是,CentOS。 为什么呢?作为一个庞大的系统运营商,在很长的一段时间里,我们需要在多种大型系统中找到一个可靠的,可预测的系统,我们需要从世界上最强大的站群软件供应商和开源专案中获得强有力的支援。对于那些最常用的系统,我们需要文件,工具和全球性资源。正因如此,RedHat / CentOS 系列发行版正是我们的选择。他们能够满足以上所有需求,而且问题相对较少、长期稳定,这使得我们能够为成千上万的执行了不同配置、服务和应用的系统提供世界级的维护。RedHat Enterprise Linux (RHEL) 是黄金标准的企业发行版。它每五年左右更新一次,在系统的稳定性,前瞻性和安全性上有著极大的优势。每当新的主版本发行后,比如 5.x 亦或最近的 6.x,所有版本和程式码都将保留不变,只有安全问题或是主要的 bug,例如后门,埠之类的问题,会通过释出新的子版本来修复。CentOS 是 RHEL 发行版对应的开源版本,通常在 RedHat 的释出后就会很快发行。我们使用 CentOS 的原因在于 RHEL 发行版的标准支援服务费用非常高,大约每台站群服务器 800 美元左右,对于我们很多拥有数十台甚至上百台站群服务器的使用者来说,这是必须要控制的成本。RHEL/CentOS 系统有两个潜在的问题:首先,一旦确定了主版本,, 除了安全问题和严重故障会被修复以外,其他内容将不会做任何改变。这虽然对稳定性有好处,但是对许多服务不利。比如 MySQL 和 PHP 服务,它们在这五年的 CentOS/RHEL 主版本释出周期中会进行繁重的开发和大量的修改。例如,MySQL5.0 是当前 RHEL/CentOS 主版本所预设使用的版本,但是当前 MySQL 已经更新到 5.1 和 5.5 版本了。幸运的是,这个问题被 Yum 站群软件包管理器轻易地解决了。如此以来,那些主要的站群软件,例如当前 RHEL/CentOS 中实际的元件,包括核心和所有工具等仍然来自发行版, 但是那些附加的站群软件,例如 Nginx,Apache,PHP,Java 和 MySQL 等等来自更新的站群软件源例如 Fedora; 或者直接从开发商获取更新的版本例如 MySQL。 在我们这里,我们有自己专用的安装镜像站群来全自动的处理所有这些事情。其次,CentOS 的发行会滞后于 RedHat 的发行,包括关键的补丁和修复。这在 RHEL 6.x 的发行周期中尤为显著。但是根据我们的经验,这没什么好担心的,对我们来说永远不会成为问题。很多人询问我们为什么不用基于 Debian 的系统,例如 Debian 或者 Ubuntu 站群服务器。如果在别无选择的情况下,我们的确会支援这个建议,但是根据我们的经验来看,这些系统并不如 RHEL/CentOS 来的稳定和可靠。我们认为,这在某种程度上是由于他们过快的发展和各个版本、组合之间较少的测试且不成熟所导致的。然而尽管他们非常流行,但是主要的服务商和专案都仍然首选 RHEL/CentOS 系统,因为这样他们就可以为企业顾客提供服务,(对 Oracle 和 MySQL 更是如此)。除此之外,基于 Debian 的系统有许多核心和稳定性问题,尤其是在我们的云端计算服务中。对我们而言,唯一使用 Debian/Ubuntu 的原因是:“它们能够为一个系统提供必要的特殊服务时,尤其是当一些驱动程式或者一些 IO 子系统需要一种新的核心的时候”。例如,ext4 档案系统或在最近的核心中日志的改变等;现在,所有这一切都包含在了 RHEL/CentOS6.x 中。当然,多数 Linux 开发者都使用的是 Ubuntu 的桌面版,而且可以理解的是,他们更倾向在开发生产时使用相同的系统,并且还能使用很多有趣的工具。但总体上来说,我们依然认为 RHEL/CentOS 是一个更优越的部署平台,并且已经有十多个客户成功地转向使用 CentOS 作为生产环境并且没有任何问题,但这仍然是艰巨的任务。总的来说,你将更乐于看到一个良好管理的 CentOS 系统。我们有成千上万台站群服务器使用 CentOS 平台,而每年平均只有一台站群服务器崩溃。我们也很难想象它竟如此罕见,所以,挑一个优秀、迅捷、可靠的平台吧!
查看详情点赞评论收藏浏览432023-05-22 15:13:00比较优雅的个性签名推荐
1、只愿你眉眼如初风华如故2、愿我是阳光,明媚而不忧伤3、我将悲欢和酒饮念你平生一展眉4、我的山水落在你的眉间5、凤凰涅槃金鹏展翅待我重出江湖时6、笑叹浮生若梦追忆年华似水7、愿世间美好都如约而至8、晚风吻尽荷花叶任我醉倒在池边9、你活在人间 等于罪恶滔天10、巴黎铁塔下一颗烂草东京樱花下一朵残花11、更相不敌莫让青许两白头12、不愿放手只想到白头13、路是我选的我愿颠沛流离14、恰好那天风烟俱净阳光正好15、ヮ随风飞舞的发丝ヮ风情万种的霓裳16、给我一杯清酒说笑着说别回头17、懂得珍惜才配拥有 懂我心伴我久18、你的感情像彩虹我伸开手却只能握到风19、但愿来日方长不是匆匆一场20、你的笑能抵过风霜是我见过最美的太阳
查看详情点赞评论收藏浏览852023-05-25 11:22:29MD5 与 SHA-256比较!示例(Go)
什么是MD5?MD5(Message-Digest Algorithm 5)是一种消息摘要算法,用于计算数据的哈希值。它可以将任意长度的数据转换为一个128位的哈希值,该哈希值可以用作数据的识别码。 MD5算法的计算过程非常简单:对数据进行哈希处理,生成一个128位的数字,该数字表示原始数据的特征值。由于MD5算法采用的是单向哈希函数,即只能从哈希值中计算出原始数据,而不能从原始数据中计算出哈希值,因此可以确保原始数据不被篡改。 虽然MD5算法被广泛使用,但其安全性一直受到质疑。SHA-256算法相比MD5算法更强,能够更好地保护数据的安全性。因此,在实际应用中,建议使用SHA-256等更强的算法来保护数据的安全性。什么是SHA-256?SHA-256(Secure Hash Algorithm 256)是一种哈希算法,常用于数字签名、文件完整性校验、数据加密等场景。它是一种消息认证码,用于确保数据完整性,可以有效地防止数据被篡改或者伪造。 SHA-256算法的输入是任意长度的二进制数据,输出是一个长度为32字节的哈希值。该哈希值可以用作数字签名的密钥,或者用于文件完整性校验。在数字签名中,使用SHA-256算法将数据和密钥一起计算,生成一个哈希值,该哈希值可以用于验证数据的完整性。在文件完整性校验中,将待校验的文件的前n个字节与一个哈希值进行比较,如果哈希值匹配,则说明文件未被篡改。 SHA-256算法的安全性得到了广泛认可,是目前最常用的哈希算法之一。不过需要注意的是,任何算法都不是绝对安全的,需要根据实际情况选择合适的算法和安全策略。示例(Go)md5生成:import ( "crypto/md5" ) // 计算哈希值 func hash(data string) (string, error) { h := md5.New() _, err := h.Write([]byte(data)) if err != nil { return "", err } return hex.EncodeToString(h.Sum(nil)), nil } // 使用示例 data := "hello world" result, err := hash(data) if err != nil { return } fmt.Println(result) // "b0baee9d279d34fa1dfd71aadb908c3f"SHA-256生成:import ( "crypto/sha256" ) // 计算哈希值 func hash(data string) (string, error) { h := sha256.New() _, err := h.Write([]byte(data)) if err != nil { return "", err } return "sha256:" + hex.EncodeToString(h.Sum(nil)), nil } // 使用示例 data := "hello world" result, err := hash(data) if err != nil { return } fmt.Println(result) // "sha256:a3c25f34ed9f1dfcc4b4b41a8058d3438df8e224b3973ab0bb5408cddbc58ee3c2"
查看详情点赞评论收藏浏览1632023-06-12 15:28:13go生成带logo的二维码!(补充)
代码:package main import ( "bytes" "encoding/base64" "fmt" "github.com/nfnt/resize" "image" _ "image/jpeg" "image/png" "github.com/skip2/go-qrcode" "golang.org/x/image/draw" "os" ) // CreateQrCodeBs64WithLogo 带logo的二维码图片生成 content-二维码内容 size-像素单位 logoPath-logo文件路径 func CreateQrCodeBs64WithLogo(content, logoPath, outPath string, size int) (data string, err error) { code, err := qrcode.New(content, qrcode.High) if err != nil { return } //code.DisableBorder = true //设置文件大小并创建画板 qrcodeImg := code.Image(size) outImg := image.NewRGBA(qrcodeImg.Bounds()) //读取logo文件 logoFile, err := os.Open(logoPath) if err != nil { return } logoImg, _, _ := image.Decode(logoFile) logoImg = resize.Resize(uint(size/10), 0, logoImg, resize.Lanczos3) // 添加边框 // 图片到边框距离 pic2FramePadding := logoImg.Bounds().Dx() / 10 // 新建一个边框图层 transparentImg := image.NewRGBA(image.Rect(0, 0, logoImg.Bounds().Dx()+pic2FramePadding, logoImg.Bounds().Dy()+pic2FramePadding)) // 图层颜色设为白色 draw.Draw(transparentImg, transparentImg.Bounds(), image.White, image.Point{}, draw.Over) // 将缩略图放到透明图层上 draw.Draw(transparentImg, image.Rect(pic2FramePadding/2, pic2FramePadding/2, transparentImg.Bounds().Dx(), transparentImg.Bounds().Dy()), logoImg, image.Point{}, draw.Over) //logo和二维码拼接 draw.Draw(outImg, outImg.Bounds(), qrcodeImg, image.Pt(0, 0), draw.Over) offset := image.Pt((outImg.Bounds().Max.X-transparentImg.Bounds().Max.X)/2, (outImg.Bounds().Max.Y-transparentImg.Bounds().Max.Y)/2) draw.Draw(outImg, outImg.Bounds().Add(offset), transparentImg, image.Pt(0, 0), draw.Over) buf := new(bytes.Buffer) _ = png.Encode(buf, outImg) // 写入文件 f, _ := os.Create(outPath) _ = png.Encode(f, outImg) res := base64.StdEncoding.EncodeToString(buf.Bytes()) return res, nil } func main() { s, err := CreateQrCodeBs64WithLogo("http://www.alingfeng.cn/", "logo.png", "qr.png", 512) if err != nil { fmt.Println(err) return } fmt.Println(s) } 结果:
查看详情点赞评论收藏浏览992023-06-12 17:25:31《百家姓》全文,前百排名!
2023年百家姓全文:赵钱孙李 周吴郑王 冯陈褚卫 蒋沈韩杨朱秦尤许 何吕施张 孔曹严华 金魏陶姜戚谢邹喻 柏水窦章 云苏潘葛 奚范彭郎鲁韦昌马 苗凤花方 俞任袁柳 酆鲍史唐费廉岑薛 雷贺倪汤 滕殷罗毕 郝邬安常乐于时傅 皮卞齐康 伍余元卜 顾孟平黄和穆萧尹 姚邵湛汪 祁毛禹狄 米贝明臧计伏成戴 谈宋茅庞 熊纪舒屈 项祝董梁杜阮蓝闵 席季麻强 贾路娄危 江童颜郭梅盛林刁 钟徐邱骆 高夏蔡田 樊胡凌霍虞万支柯 昝管卢莫 经房裘缪 干解应宗丁宣贲邓 郁单杭洪 包诸左石 崔吉钮龚程嵇邢滑 裴陆荣翁 荀羊於惠 甄曲家封芮羿储靳 汲邴糜松井段富巫 乌焦巴弓牧隗山谷 车侯宓蓬全郗班仰 秋仲伊宫宁仇栾暴 甘钭厉戎 祖武符刘 景詹束龙叶幸司韶 郜黎蓟薄 印宿白怀 蒲邰从鄂索咸籍赖 卓蔺屠蒙 池乔阴郁 胥能苍双闻莘党翟 谭贡劳逄 姬申扶堵 冉宰郦雍却璩桑桂 濮牛寿通 边扈燕冀 郏浦尚农温别庄晏 柴瞿阎充 慕连茹习 宦艾鱼容向古易慎 戈廖庾终 暨居衡步 都耿满弘匡国文寇 广禄阙东 欧殳沃利 蔚越夔隆师巩厍聂 晁勾敖融 冷訾辛阚 那简饶空曾毋沙乜 养鞠须丰 巢关蒯相 查后荆红游竺权逯 盖益桓公 万俟司马 上官欧阳(复姓)夏侯诸葛 闻人东方(复姓)赫连皇甫 尉迟公羊(复姓)澹台公冶 宗政濮阳(复姓) 淳于单于 太叔申屠(复姓)公孙仲孙 轩辕令狐(复姓) 钟离宇文 长孙慕容(复姓)鲜于闾丘 司徒司空(复姓) 亓官司寇 仉督子车(复姓)颛孙端木 巫马公西(复姓) 漆雕乐正 壤驷公良(复姓)拓跋夹谷 宰父谷梁(复姓) 晋楚闫法 汝鄢涂钦段干百里 东郭南门(复姓) 呼延 归 海 羊舌 微生(有复姓)岳帅缑亢 况后有琴 梁丘左丘 东门西门(复姓)商牟佘佴 伯 赏 南宫(有复姓)墨哈谯笪 年爱阳佟第五 言 福(有复姓)《百家姓》终 中国人口最多姓氏前十排名: 1、王姓-占全中国汉族人口的 7.94%=101,300,000人。 2、张姓 -占全中国汉族人口的 7.41%=100,900,000人。 3、李姓 -占全中国汉族人口的 7.07%=95,800,000人。 4、刘姓 -占全中国汉族人口的' 5.38%=70,600,000人。 5、陈姓 -占全中国汉族人口的 4.53%=54,400,000人。 6、杨姓 -占全中国汉族人口的 3.08%=41,000,000人。 7、黄姓 -占全中国汉族人口的 2.29%=29,500,000人。 8、周姓 -占全中国汉族人口的 2.23%=26,800,000人。 9、胡姓 -占全中国汉族人口的 2.12%=25,400,000人。 10、赵姓-占全中国汉族人口的 2.05%=24,600,000人。 中国人口最多的前100名姓氏:前十名总人口约为5.5亿人。 11吴 12徐 13宋 14林 15朱 16孙17高 18曹 19郭 20马 21罗 22何23梁 24谢 25韩 26郑 27于 28唐 29董 30夏 31傅 32冯 33袁 34薛 35许 36姚 37彭 38曾 39汪 40江 41苏 42卢 43叶 44余 45肖 46魏47邓48谭 49阎 50丁 51潘 52杜 53戴 54毛 55钟 56廖57田 58任59姜 60范 61方 62贾 63蔡 64程 65沈 66邹 67熊 68金69陆 70郝 71孔 72白 73崔 74康 75吕 76邱 77秦 78蒋79石 80史 81顾 82侯 83邵 84孟 85龙 86 万 87段 88莫 89钱 90汤 91尹 92黎 93易 94常 95武 96乔 97贺 98赖 99龚 100文
查看详情点赞评论收藏浏览992023-06-13 16:21:43《千字文》全文,儿童启蒙必备。
《千字文》为南朝周兴嗣所编,它的撰作,相传还有一段故事;原来是当年梁武帝令殷铁石在王羲之书写的碑文中拓下不重复的一千个字,供皇子们学书用的。但由于字字孤立,互不联属,所以他又召来周兴嗣嘱道:“卿有才思,为我韵之。”周兴嗣只用了一个晚上就编好进呈武帝。这便是传至今日的《千字文》。周兴嗣的《千字文》精思巧构,知识丰瞻,音韵谐美,宜蒙童记诵,故成为千百年蒙学教科书。天地玄黄,宇宙洪荒。日月盈昃,辰宿列张。寒来暑往,秋收冬藏。闰余成岁,律吕调阳。云腾致雨,露结为霜。金生丽水,玉出昆冈。剑号巨阙,珠称夜光。果珍李柰,菜重芥姜。海咸河淡,鳞潜羽翔。龙师火帝,鸟官人皇。始制文字,乃服衣裳。推位让国,有虞陶唐。吊民伐罪,周发殷汤。坐朝问道,垂拱平章。爱育黎首,臣伏戎羌。遐迩一体,率宾归王。鸣凤在竹,白驹食场。化被草木,赖及万方。盖此身发,四大五常。恭惟鞠养,岂敢毁伤。女慕贞洁,男效才良。知过必改,得能莫忘。罔谈彼短,靡恃己长。信使可覆,器欲难量。墨悲丝染,诗赞羔羊。景行维贤,克念作圣。德建名立,形端表正。空谷传声,虚堂习听。祸因恶积,福缘善庆。尺璧非宝,寸阴是竞。资父事君,曰严与敬。孝当竭力,忠则尽命。临深履薄,夙兴温凊。似兰斯馨,如松之盛。川流不息,渊澄取映。容止若思,言辞安定。笃初诚美,慎终宜令。荣业所基,籍甚无竟。学优登仕,摄职从政。存以甘棠,去而益咏。乐殊贵贱,礼别尊卑。上和下睦,夫唱妇随。外受傅训,入奉母仪。诸姑伯叔,犹子比儿。孔怀兄弟,同气连枝。交友投分,切磨箴规。仁慈隐恻,造次弗离。节义廉退,颠沛匪亏。性静情逸,心动神疲。守真志满,逐物意移。坚持雅操,好爵自縻。都邑华夏,东西二京。背邙面洛,浮渭据泾。宫殿盘郁,楼观飞惊。图写禽兽,画彩仙灵。丙舍旁启,甲帐对楹。肆筵设席,鼓瑟吹笙。升阶纳陛,弁转疑星。右通广内,左达承明。既集坟典,亦聚群英。杜稿钟隶,漆书壁经。府罗将相,路侠槐卿。户封八县,家给千兵。高冠陪辇,驱毂振缨。世禄侈富,车驾肥轻。策功茂实,勒碑刻铭。盘溪伊尹,佐时阿衡。奄宅曲阜,微旦孰营。桓公匡合,济弱扶倾。绮回汉惠,说感武丁。俊义密勿,多士实宁。晋楚更霸,赵魏困横。假途灭虢,践土会盟。何遵约法,韩弊烦刑。起翦颇牧,用军最精。宣威沙漠,驰誉丹青。九州禹迹,百郡秦并。岳宗泰岱,禅主云亭。雁门紫塞,鸡田赤诚。昆池碣石,钜野洞庭。旷远绵邈,岩岫杳冥。治本于农,务兹稼穑。俶载南亩,我艺黍稷。税熟贡新,劝赏黜陟。孟轲敦素,史鱼秉直。庶几中庸,劳谦谨敕。聆音察理,鉴貌辨色。贻厥嘉猷,勉其祗植。省躬讥诫,宠增抗极。殆辱近耻,林皋幸即。两疏见机,解组谁逼。索居闲处,沉默寂寥。求古寻论,散虑逍遥。欣奏累遣,戚谢欢招。渠荷的历,园莽抽条。枇杷晚翠,梧桐蚤凋。陈根委翳,落叶飘摇。游鹍独运,凌摩绛霄。耽读玩市,寓目囊箱。易輶攸畏,属耳垣墙。具膳餐饭,适口充肠。饱饫烹宰,饥厌糟糠。亲戚故旧,老少异粮。妾御绩纺,侍巾帷房。纨扇圆洁,银烛炜煌。昼眠夕寐,蓝笋象床。弦歌酒宴,接杯举殇。矫手顿足,悦豫且康。嫡后嗣续,祭祀烝尝。稽颡再拜,悚惧恐惶。笺牒简要,顾答审详。骸垢想浴,执热愿凉。驴骡犊特,骇跃超骧。诛斩贼盗,捕获叛亡。布射僚丸,嵇琴阮箫。恬笔伦纸,钧巧任钓。释纷利俗,并皆佳妙。毛施淑姿,工颦妍笑。年矢每催,曦晖朗曜。璇玑悬斡,晦魄环照。指薪修祜,永绥吉劭。矩步引领,俯仰廊庙。束带矜庄,徘徊瞻眺。孤陋寡闻,愚蒙等诮。谓语助者,焉哉乎也。
查看详情点赞评论收藏浏览892023-06-13 16:45:17Gin框架系列教程(1)- gin框架介绍,环境搭建
(从 0-1 搭建你的Gin框架后台系统)一、gin框架介绍Gin 是一个用 Go (Golang) 编写的 web 框架。它是一个类似于 martini 但拥有更好性能的 API 框架,由于 httprouter,速度提高了近 40 倍,简单易用,是一个轻量级框架。如果你是性能和高效的追求者,你会爱上 Gin。二、为什么选择gin1.运行响应非常快2.快速开发3.文档齐全4.社区活跃三、特性1.快速:基于 Radix 树的路由,小内存占用。没有反射。可预测的 API 性能。2.支持中间件:传入的 HTTP 请求可以由一系列中间件和最终操作来处理。 例如:Logger,Authorization,GZIP,最终操作 DB。3.Crash 处理:Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将始终可用。例如,你可以向 Sentry 报告这个 panic!4.JSON 验证:Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。5.路由组:更好地组织路由。是否需要授权,不同的 API 版本…… 此外,这些组可以无限制地嵌套而不会降低性能。6.错误管理:Gin 提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误。最终,中间件可以将它们写入日志文件,数据库并通过网络发送。7.内置渲染:Gin 为 JSON,XML 和 HTML 渲染提供了易于使用的 API。8.可扩展性:新建一个中间件非常简单gin环境搭建注意:go1.9版本以上,很快将不再支持go1.7或go1.8。一、go环境安装1.go安装下载地址: https://go.dev/dl/这里选择你需要下载的版本,现在最新版是1.20.5,可以自己选择需要的版本。windows,和linux的安装方法稍有差异,不过大同小异,网上有很多方法,不过多介绍,可以多参考网上。这里我们直接安装windows版本(go1.19.4)。然后,我们安装windows软件一样,傻瓜式操作,直接下一步,下一步到底。2.环境配置:变量名:GOPATH 变量值:E:\go\workspace 你的工作路径变量名:GOROOT 变量值:E:\go\install go的安装路径变量名:Path 增加值:%GOROOT%\bin;%GOPATH%\bin;注意:删除自动添加的gopath和goroot注意添加完GOPATH,GOROOT两个变量值,还需要添加他们下面的bin执行目录。3.检查配置是否成功go env 查看GOPATH和GOROOT是否正确然后就可以看到安装的目录和版本是否正确,当显示下面截图,我们就安装成功了。二、工程管理:工作目录下新建三个文件夹1.src:用于以代码包的形式组织并保存go源码文件,2.pkg:用于存放经由go install命令构建的安装后的代码包,不需要手动创建3.bin:与pkg目录类似,在通过go install命令完成安装后,保存由go命令源码间生成的可执行文件三、安装gingin的安装就很简单了,直接命令拉取。go get -u github.com/gin-gonic/gin五、安装编辑工具(goland,vscode等都可以,看自己喜欢)第一节我们就到这里结束了,接下来我们就开始gin框架吧。hello world
查看详情点赞评论收藏浏览822023-06-19 15:36:49Gin框架系列教程(2)- Gin的第一次,hello world!
(从 0-1 搭建你的Gin框架后台系统)我们先新建一个文件,gin_demo,然后初始化一个go项目,我们用go mod来管理包,之后我们讲一下什么是modgo mod init gin_demo接下来新建main.go文件,引入Gin,开始第一个项目package main import "github.com/gin-gonic/gin" func main() { // g:=gin.New() g := gin.Default() g.GET("/", func(c *gin.Context) { c.String(200, "hello world") }) g.Run(":9000") }运行项目:go run main我们的第一个Gin项目就可以了。运行原理一、router:=gin.Default()初始化一个引擎,是gin.New()的升级二、router.GET1.RESTFUL风格的请求方法(method)2.有两个参数:relativePath:路由,string类型HandlerFunc:执行的函数3.可以使用router.Handle代替,多了个的method参数(字符串),method参数必须是大写的,如:GET三、执行的函数1.必须有个参数是gin.Context指针类型的注意:context是gin的一个重要组成部分。用来在中间层传递数据流。2.函数是个参数,不能调用四、router.Run启动http监听,有个address参数,字符串类型的,可以指定host和port注意:addr的host和port是用冒号分隔的只指定port,port前面必须要有冒号指定了host和port,host和port中间有冒号不能只指定hostg.Run(":9000")
查看详情点赞评论收藏浏览522023-06-19 16:49:00Gin框架系列教程(3)- go-mod包管理
(从 0-1 搭建你的Gin框架后台系统)go版本>=1.11一、什么是module?go中包管理工具二、使用module和不使用的区别使用环境变量中的GO111MODULE控制是否使用mod1.开启mod:go env -w GO111MODULE=on,会将包下载到gopath下的pkg下的mod文件夹中2.关闭mod:go env -w GO111MODULE=off,会将包下载到gopath下的src下3.go env GO111MODULE=auto,只有当当前目录在GOPATH/src目录之外而且当前目录包含go.mod文件或者其子目录包含go.mod文件才会启用。项目可以不用建在src下了,任何非中文路径下都可以,建议有个统一的代码路径三、go.mod文件的语法介绍go help go.mod 查看帮助示例:module my/thing go 1.13.4 require ( new/thing v2.3.4 old/thing v1.2.3 ) 1.module:指明根目录2.go 后面跟版本号是指定go的版本2.require是个动作指令,对依赖包起作用,比如require(依赖),还有exclude(排除),replace(替代),相同动作的可以放在一个动词+括号组成的结构中,如下:require ( new/thing v2.3.4 old/thing v1.2.3 ) require new/thing v2.3.4 require old/thing v1.2.3 // 排除 exclude old/thing v1.2.3 // 替换,使用箭头后的替换前面的 replace bad/thing v1.4.5 => good/thing v1.4.5 注意:exclude和replace仅适用于主的go.mod文件中,其他的依赖中会被忽略、可以使用replace替换无法获取的库,3.注释:使用//,没有/* xxx */这种块注释四、go mod 命令go mod help 查看帮助download 下载模块到本地缓存,go env中的GOCACHE路径,可以通过go clean -cache清空缓存 多个项目可以共享缓存的包 edit 在工具或脚本中编辑go.mod文件 graph 打印模块需求图 init 在当前目录下初始化新的模块 go mod init 【项目名】 默认使用当前路径的项目名称 tidy 添加缺失的模块以及移除无用的模块,生成go.sum文件 vendor 会自动下载项目中依赖的包到项目根目录下的vendor文件夹下,并写入go.mod文件,同时生成 modules.txt文件 go mod vender -v verify 检查当前模块的依赖是否全部下载下来,是否下载下来被修改过 why 解释为什么需要包或模块 注意:-v参数可以查看执行的详细信息 已经完成的项目可以这样操作来使用mod项目路径下执行go mod init然后再执行go mod vendor(或者直接运行项目)项目中可以是这样的执行顺序:init初始化 --> tidy 增删模块--> verify 校验模块-->vendor注意:项目中引入该项目下的任何路径都要是绝对路径,也就是以改项目名开头的路径使用mod的步骤:1.开启mod:go111module=on2.进入项目,执行go mod init (在项目根目录生成go.mod文件)3.启动项目(go.mod添加依赖的包)
查看详情点赞评论收藏浏览572023-06-19 16:53:29Centos 安装git
一般的平台通常都能通过自身的一个包管理工具去安装 git 的各个版本(包括当前官方最新版本),但是红帽系列通过 yum 安装却无法安装最新版本,而且都是很旧的版本,这种版本对许多新的命令以及特性都不支持,例如 switch 命令是 2.23 版本才发布的,在此之前的版本都没有,所以官方推荐像 CentOS 通过下载 git 源码包的方式去安装我们去阿里云下载git,找到版本,直接wget https://mirrors.edge.kernel.org/pub/software/scm/git/ 注意:直接 copy 下载地址,使用 wget 进行下载的时候,需要加上选项 --no-check-certificatewget --no-check-certificate https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz 接下来我们按照步骤进行安装就可以#安装前首先得安装依赖环境 yum install -y perl-devel #解压 tar -zxf git-2.9.5.tar.gz cd git-2.9.5 # 检查环境,配置安装路径 #编译安装 ./configure --prefix=/usr/local/git make && make install #添加到系统环境变量 vim ~/.bashrc #添加这一行 export PATH="/usr/local/git/bin:$PATH" #重载配置 source ~/.bashrc #查看版本 git version 就安装好了。
查看详情点赞评论收藏浏览382023-06-27 16:36:25