Go(又称Golang)时Google开发的一种静态强类型、编译型、并发性且具有垃圾回收功能的编程语言。

Go语言特点
  • 作为编译型语言,运行效率高;
  • 语法少,关键字少,开发高效且部署简单;
  • 语言层面(关键字)即支持并发,利用多核失效高效并发;
  • 类似于Java虚拟机的性能监控等,内置了Runtime;
  • 拥有丰富的标准库与网络库,内置强大的工具(如gofmt等);
  • 可实现跨平台编译,内嵌C语言支持等
Go应用方向
  • 服务器编程,如处理日志、数据打包、虚拟机处理、文件系统等;
  • 分布式系统,数据库代理,分布式中间件等;
  • 网络编程,Web应用或Api应用等;
  • 云平台开发,Docker及K8s等都是Go语言开发
Go环境搭建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#方式一:yum安装(此时GOROOT=/usr/lib/golang;GOPATH=/root/go)
yum install -y golang;
#设置GOPATH到/adta/gopath
go env -w GOPATH=/data/gopath

#方式二:源码安装
#下载Golang安装包
cd /opt; wget https://golang.google.cn/dl/go1.18.1.linux-amd64.tar.gz;
#解压缩安装包到/usr/lib
tar zxvf go1.18.1.linux-amd64.tar.gz -C /usr/local
#设置GCROOT环境变量
echo 'export GOROOT=/usr/local/go' >> ~/.bash_profile
echo 'export PATH=$PATH:$GOROOT/bin' >> ~/.bash_profile
echo 'export GOPATH=/data/gopath' >> ~/.bash_profile
source ~/.bash_profile

#查看GO环境变量
go env
#修改go环境变量
go env -w GOPATH=/data/gopath
GO环境变量解析
  • GOROOT:go官方标准文件的位置,该目录的bin下只有发行版的可执行文件,如go、gofmt等
  • GO111MODULE:go module开发模式取代原有的GOPATH开发模式,1.16后默认为on
  • GOPATH:src存放程序源码,bin存放可执行文件,pkg/mod存放通过通过go get下载的第三方包和依赖
  • GOBIN:GOBIN=$GOPATH/bin,存放非go发行版的可执行文件,比如go get/install下载的非go发行版可执行文件
GO-hello world

创建一个hello.go

1
2
3
4
5
6
7
package main

import "fmt"

func main(){
fmt.Println("hello world")
}

可通过go run hello.go命令允许此go程序
也可以通过go build hello.go在当前目录下编译一个可执行二进制文件

GO开发模式

https://www.cnblogs.com/wjaaron/p/14797003.html

类加载器子系统的作用

从文件系统或者网络中加载class文件(class文件在文件开头有特定的文件标识CAFEBABY)到虚拟机中;ClassLoader只负责class文件的加载,至于是否可以运行则由Execution Engine(执行引擎)决定。
类加载器子系统整体分为以下三个阶段:

加载阶段(Loading)

加载阶段分为以下三个过程:
1、通过类的全限定名获取定义此类的二进制字节流;
2、将这个字节流所代表的静态存储结构转换为方法区的运行时数据结构;
3、在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。

链接阶段(Linking)
初始化阶段(Initialization)

本系列共分为四个篇章:
1、类加载子系统
2、运行时数据区
3、执行引擎与StringTable
4、垃圾回收篇

防火墙相关命令
1
2
3
4
5
6
7
8
9
10
11
12
#查看防火墙状态
systemctl status firewalld
#查看防火墙规则
cat /etc/firewalld/zones/public.xml
#添加/移除 防火墙规则 --permanent(永久的) --add/remove-port(添加/移除端口)
firewall-cmd --permanent --add-port=8080/tcp
#重新加载permanent防火墙规则,非permanent的规则将被丢失
firewall-cmd --reload
#允许192.168.1.1访问本机8080端口 --add/remove(添加/移除)
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.1 port port=80 protocol=tcp accept"
#本地80端口转发到192.168.1.1的8080端口
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.1
进程/端口相关命令
1
2
3
4
5
6
7
8
9
10
#查看相关进程
ps -ef|grep java
#杀掉相关进程
ps -ef|grep java|grep -v "grep"|awk '{print$2}'|xargs kill [-9]
#查看进程占用的端口
cat /etc/services|grep mysql
#查看8080端口被哪些进程占用
lsof -i:8080
cat /etc/services|grep -w 80
netstat -anp|grep -w 80
硬盘/目录相关命令
1
2
3
4
5
6
#查看硬盘及分区情况
lsblk
#查看当前文件夹大小 du:https://www.runoob.com/linux/linux-comm-du.html
du -sh
#查看当前目录下各文件大小(MB) 并按大小排序
du -am --max-depth=1|sort -rn
ssh免密登录
1
2
3
4
5
6
#生成本地公私钥
ssh-keygen -t rsa
#将本地id_rsa.pub的内容写入到远程~/.ssh/authorized_keys下
#如果免密登录无效 确认远程.ssh文件夹权限
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
后台启动服务
1
nohup sh xxx.sh > xxx.log 2>&1 &

Github Pages

Github Pages是一个由Github提供的免费个人静态网站托管服务,可用于个人博客搭建、demo演示等等

注:本文章中yourGithubName指的是你在github网站上的用户名

使用方法

创建github repository

前往github官网New Repository;

如果资源名称为yourGithubName.github.io那么部署好之后即可通过https://yourGithubName.github.io 访问,否则要通过https://name.github.io/repositoryName访问

开启Pages选项
  • 进入repository首页 > Settings > Pages
  • 选择branch作为网站目录
  • 点击Save按钮保存配置即可
访问地址展示效果

本地生成网站静态文件后,推送到上面选择的分支;然后访问对应的网站即可

设置自定义域名

如果你拥有自己的域名 则可以将https://yourGithubName.github.io改成你自己的域名地址

  • 在静态页面根目录创建一个CNAME文件,文件内容即为你的域名,比如:https://blog.muern.com
  • 域名解析记录添加一个CNAME类型记录,记录值为yourGithubName.github.io
  • 现在可以访问自己的域名试一下啦

Hexo

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。

本篇文章基于Hexo + Next + Github Page搭建自己的博客网站。

Hexo的安装

Hexo的安装依赖nodejs(版本不低于10.13 建议大于12.13),Github相关资源依赖git

1
2
3
4
5
6
7
8
#确保nodejs和npm正确安装
node -v; npm -v
#确保git已安装
git --version
#安装hexo
npm install -g hexo-cli
#查看hexo版本
hexo -v

Hexo的部署

Hexo生成的静态网页可使用Github Pages免费部署

  • clone Github资源库到本地,然后初始化hexo: hexo init
  • 安装npm依赖:npm install
  • 本地启动服务验证:hexo server/hexo s
  • 部署到远程:
    • 配置远程git地址
    • 安装npm部署插件:```npm install hexo-deployer-git -save”
    • 生成本地静态文件:hexo generate/hexo g
    • 推送到远程:hexo deploy/hexo d

      Hexo常用命令

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      #初始化Hexo
      hexo init
      #清除静态文件和缓存
      hexo clean
      #部署博客网站(将生成的静态文件推送到远程仓库)
      hexo deploy
      #本地启动hexo服务
      hexo server
      #新建文章(默认位于source/_posts/test.md,可通过--path指定路径)
      hexo new [--path=others/hexo.md] "test"
      #新建一个页面(位于source/test/index.md)
      hexo new page "test"

Hexo常见配置

git地址配置

修改hexo目录下的_config.yaml

1
2
3
4
deploy:
type: git
repo: git@github.com:gegeza/gegeza.github.io.git
branch: blog
主题配置

github上有很多hexo的主题,下载对应主题的hexo/themes目录下;然后修改hexo目录下的_config.yaml即可启用主题

1
theme: next
自定义样式配置

在theme/source/css下新建_custom文件夹,然后新建样式文件custom.styl;然后编辑theme/source/css/main.styl,新增以下代码块

1
2
3
//Custom css
// --------------------------------------------------
@import "_custom/custom"
首行缩进配置

在自定义css文件中添加以下样式即可

1
.post-body p { text-indent: 2em; }
站点单词统计配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#安装插件hexo-symbols-count-time
npm install hexo-symbols-count-time
#修改hexo/_config.yml
symbols_count_time:
symbols: true
time: true
total_symbols: true
total_time: true
exclude_codeblock: true
#修改hexo/themes/next/_config.yml
symbols_count_time:
separated_meta: true
item_text_post: true
item_text_total: false
awl: 4
wpm: 275
algolia搜索配置

待续

其它官方配置
详见[官网文档](https://hexo.io/zh-cn/docs/configuration)