获取 Linux 环境下当前的 IP v4 的 IP 地址。在不修改 Linux 系统的 host 映射的情况下,InetAddress.getLocalHost().getHostAddress()
获取的 IP 地址很可能是 127.0.0.1,而真正想要的是对外 IP 地址。
获取 Linux 环境下当前的 IP v4 的 IP 地址。在不修改 Linux 系统的 host 映射的情况下,InetAddress.getLocalHost().getHostAddress()
获取的 IP 地址很可能是 127.0.0.1,而真正想要的是对外 IP 地址。
Spring Boot 2系列(五十四):分布式文件服务 FastDFS 安装与集成
项目需要用到文件服务,外网使用阿里云的 OSS 对象存储,内网优先考虑 FastDFS,备选 go-fastdfs 。
FastDFS 是一款开源的轻量级的分布式文件系统,功能主要包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了文件大容量存储和高性能访问的问题。FastDFS特别适合以文件为载体的在线服务,如图片、视频、文档等等。–摘自官方说明。
FastDFS 的官方文档极少,不便于快速学习用使用,需要个人整理总结。在源码的根目录下有个 INSTALL 的文件,里面记录的是安装 FastDFS 服务的安装步骤。
Github > FastDFS,Gitee > FastDFS,go-fastdfs ,fastdfs-client-java。另可参考 tobato/FastDFS_Client 文档。
Spring Boot 2系列(五十三):Spring Boot 配置外部化
Spring Boot 允许将配置外部化,以便可以在不同的环境中使用相同的应用程序代码。可以使用 properties
文件、YAML
文件、环境变量和命令行参数将配置外部化。
属性值可以通过@Value
注解直接注入到 Bean 的属性,通过 Spring 的 Environment
抽象访问,或者通过@ConfigurationProperties
绑定到结构化对象。
之前写过 Spring Boot 配置的相关文件,但不完整。本篇基于官方文档(Externalized Configuration)行详细描述。
常需要对图片进行处理,如 加水印,压缩,翻转 等。推荐使用一款开源的图片处理框架 Thumbnailator。
Spring Cloud(二十一):Gateway 元数据,超时,跨域,HTTPS,监控,问题定位
Spring Cloud Gateway 网关除了核心的路由判断表达式(predicate :有的译为谓词)和过滤器外,还有一些其它的设置,以便于可以更好的配置和应用 Gateway。
例如,元数据配置,超时处理,跨域处理,HTTPS 安全配置,监控/指标 收集,问题定位等。可以添加一些全局配置,可以收集健康数据,便于快速定位问题等等。
Spring Cloud(二十):Gateway 路由匹配表达式工厂,过滤器工厂,全局过滤器,HTTP头过滤器
Spring Cloud Gateway 项目提供了一个基于 Spring 生态体系构建的 API 网关,包括:Spring 5,Spring Boot 2。
Spring Cloud Gateway 旨在提供一种简单而有效的方试将前端请求 URI 路由到后端服务的接口,它还提供了其它的附加实用的功能,例如:安全性,监控/指标,可伸缩性等。
Spring Cloud(十九):Gateway 特性,述语,自动配置与简单应用
即将开发的新平台在网关组件上选择了 Gateway,Spring 官方主推 Gateway。Zuul 1 虽然很成熟,但不再维护,Zuul 2 已闭源。
网关组件,不管是 Zuul 还是 Gateway,其核心技术脱离不了 代理请求 和 过滤器。本篇根据 Spring Cloud Gateway 官方文档对其功能,配置,应用进行详细描述。
1 | package main |
Go 内置两种字符类型:
byte
是 uint
的别名)rune
。rune 在 Go 内部是 int32
类型的别名,占用 4 个字节。Go 语言默认的字符编码是 UTF-8 类型,如果需要特殊的编码转换,则使用 Unicode/UTF-8 标准包。
Go 语言将字符串作为一种原生的基本数据类型,字符串初始化可以使用 字符串字面量。
字面量:用于表达源代码中一个固定值的符号,源于 C 语言中的称呼,其它语言有称为常量。
字符串字面量(stringliteral)是指双引号引住的一系列字符,双引号中可以没有字符,可以只有一个字符,也可以有很多个字符。
字符串是不可变值类型,内部用指针指向 UTF-8 字节数组
""
。字符串类型底层是一个二维的数据结构,一个是指针指向字节数组的起点,另一个是长度。例如:
1 | type stringStruct struct { |
所有类型声明都是一样的。
显示完整声明
1 | var a = "hello, word" |
短类型声明::=
只能出现在函数内(包括方法内),只是 Go 编译器自动进行数据类型推断。
Go 支持多个类型变量同时声明并赋值,但不建议这么使用,不易阅读
1 | a := "hello" |
字符串是常量,可以通过类似数组的索引访问其字节单元,但是不能修改某个字节的
值。例
1 | package main |
使用 ` 定义不做转义处理的原始字符串,支持跨行
1 | package main |
连符串使用 +
符号来连接,跨行连接的 +
必须在上一行的结尾,否则会报错。
1 | package main |
因字符串底层是个二维的数据结构,所以可以使用索引 和 长度(单位:字节) 来获取字符串的子串。
**注意:**中文是 三个字节 表示一个汉字,如果长度不是 3 的整数倍就会显示乱码。
1 | package main |
Go 源码采用的是 UTF-8 的编码方式,UTF-8 的字符占用的字节数可以有 1~4 个字节,Rune 字符常量使用 ''
将其括住。
支持 \uFFFF、\U7FFFFFFF、\xFF
格式, 对应 rune
类型,UCS-4。
1 | package main |
要修改字符串,可先将其转换成 []rune 或 []byte
1 | package main |
有两种方式,但都是基于 for 循环。
1 | package main |
strings
是 Go 自带的字符串工具类。
strings.HasPrefix(src, dest)
,返回 bool
值
1 | package main |
strings.HasPrefix(src, dest)
,返回 bool
值
1 | package main |
strings.Index(src, dest)
,返回 int
值
1 | package main |
strings.LastIndex(src, dest)
,返回 int
值
1 | package main |
Replace(s, old, new string, n int) string
:指定替换次数ReplaceAll(s, old, new string) string
:替换所有,实际调上面的方法,n 传的是 -1,表示不限制次数。1 | package main |
Count(s, substr string) int
:返回整数
1 | package main |
Repeat(s string, count int) string
,返回 copy n 次的新字符串
1 | package main |
ToLower(s string) string
:转小写ToUpper(s string) string
:转大写1 | package main |
Trim(s, cutset string) string
:去掉首尾指定的字符TrimSpace(s string) string
:去掉首尾空格TrimPrefix(s, prefix string) string
:去掉前缀指定的字符TrimSuffix(s, suffix string) string
:去掉后缀指定的字符1 | package main |
Fields(s string) []string
:返回空格分隔的子串Split(s, sep string) []string
:指定分隔符,返回分隔的子串1 | package main |
Join(elems []string, sep string) string
:传入字符串数组和连接符,返回字符串1 | package main |
Go 基础:标识符(预声明标识符,自定义标识符,关键字,类型,函数,常量)
Go 语言共有 65 个预声明的标识符,包括 25 个关键字(keywords)和 40 个其他预声明标识符。
40 个其他预声明标识符包括 20 个内置数据类型标识符,4 个常量标识符,1 个空白标识符,15 个内置函数。