目录
数学
含义 |
PHP |
Golang |
数学函数 |
- |
- |
求绝对值 |
abs() |
math.Abs() |
进一法取整 |
ceil() |
math.Ceil() |
舍去法取整 |
floor() |
math.Floor() |
浮点数取余 |
fmod() |
math.Mod() |
返回数的n次方 |
pow() |
math.Pow() |
浮点数四舍五入 |
pow() |
math.Round(10.5) |
求平方根 |
sqrt() |
math.Sqrt() |
求最大值 |
max() |
math.Max(x, y float64) |
求最小值 |
min() |
math.Min(x, y float64) |
更好的随机数 |
mt_rand() |
rand.Int() |
随机数随机返回范围内的值 |
rand() |
- |
获取圆周率值 |
pi() |
math.Pi (常量) |
字符串md5编码 |
md5() |
fmt.Printf("%x",md5.Sum([]byte("These pretzels are making me thirsty."))) |
字符串
含义 |
PHP |
Golang |
字符串函数 |
- |
- |
删除字符串两端的空格或其他预定义字符 |
trim() |
strings.Trim() |
删除字符串右边的空格或其他预定义字符 |
rtrim() |
strings.TrimRight() |
删除字符串左边的空格或其他预定义字符 |
ltrim() |
strings.TrimLeft() |
把字符串填充为指定的长度 |
str_pad |
- |
重复使用指定字符串 |
str_repeat |
strings.Repeat("na", 2) |
把字符串分割到数组中 |
str_split |
|
- |
explode() |
strings.Split("a,b,c", ",") |
- |
implode() |
strings.Join([]string{"foo", "bar", "baz"}, ", ") |
反转字符串 |
strrev() |
|
按照指定长度对字符串进行折行处理 |
wordwrap() |
|
随机地打乱字符串中所有字符 |
str_shuffle() |
|
将字符串解析成变量 |
parse_str() |
|
格式化数字 |
number_format() |
message.NewPrinter(language.English).Sprintf("%.2f", 123456789.99) |
字符串转为小写 |
strtolower() |
strings.ToLower("Gopher") |
字符串转为大写 |
strtoupper() |
strings.ToUpper("Gopher") |
字符串首字母大写 |
ucfirst() |
- |
字符串每个单词首字符转为大写 |
ucwords() |
strings.Title("loud noises") |
字符串替换操作 |
str_replace |
strings.Replace("oink oink oink", "k", "ky", 2) |
统计字符串长度 |
strlen() |
strings.Count("five", "") |
并发与锁
含义 |
PHP |
Golang |
高级并发 |
- |
- |
等待组 |
- |
sync.WaitGroup |
等待组 |
- |
WaitGroup.Add |
等待组 |
- |
WaitGroup.Done |
等待组 |
- |
WaitGroup.Wait |
互斥锁 |
- |
sync.Mutex |
互斥锁 |
- |
sync.Mutex |
互斥锁 |
- |
Mutex.Lock |
互斥锁 |
- |
Mutex.Unlock |
未被阻塞的所有Goroutine,可以被 Multiplex 到多少个线程上运行 |
- |
runtime.GOMAXPROCS(10) |
当前存在的goroutine数量 |
- |
runtime.NumGoroutine() |
并发安全的结构体 |
- |
sync.Map() |
读写锁 |
- |
sync.RWMutex() |
数组
含义 |
PHP |
Golang |
数组/切片 |
- |
- |
- |
array() |
- |
- |
array_push() |
append(slice, anotherSlice...), append(slice, elem1, elem2) |
- |
count() |
len(slice) |
- |
- |
cap(slice) |
索引起始位0,[i,j) 以i索引开始,到j索引结束不包含j索引 |
- |
slice[i:j] |
生成一个数组,用一个数组的值 作为键名,另一个数组值作为值 |
array_combine() |
- |
创建并返回一个包含指定范围的元素的数组 |
range() |
- |
创建一个由参数所带变量组成的数组 |
compact() |
- |
把一个数组分割为新的数组块 |
array_fill() |
- |
把两个或多个数组合并为一个数组 |
array_chunk() |
- |
在数组中根据条件取出一段值,并返回 |
array_merge() |
- |
在数组中根据条件取出一段值,并返回 |
array_slice() |
- |
返回两个数组的差集数组 |
array_diff() |
- |
返回两个或多个数组的交集数组 |
array_intersect() |
- |
在数组中查找一个值,返回一个键 |
array_search() |
sort.SearchStrings(a []string, x string),sort.SearchInts(a, x) |
把数组中一部分删除用其他值替代 |
array_splice() |
- |
返回数组中所有值的总和 |
array_sum() |
- |
在数组中搜索给定的值 |
in_array() |
- |
判断某个数组中是否存在指定的 key |
array_key_exists() |
- |
返回数组内部指针当前指向元素的键名 |
key() |
- |
返回数组中的当前元素(单元) |
current() |
- |
把指向当前元素的指针移动到下一个元素的位置,并返回当前元素的值 |
next() |
- |
指向当前元素的指针移动到上一个元素的位置,并返回当前元素的值 |
prev() |
- |
将数组内部指针指向最后一个元素,并返回该元素的值(如果成功) |
end() |
- |
把数组的内部指针指向第一个元素,并返回这个元素的值 |
reset() |
- |
用数组中的元素为一组变量赋值 |
list() |
- |
删除数组中的第一个元素,并返回被删除元素的值 |
array_shift() |
- |
在数组开头插入一个或多个元素 |
array_unshift() |
- |
向数组最后压入一个或多个元素 |
array_push() |
- |
取得(删除)数组中的最后一个元素 |
array_pop() |
- |
将数组打乱,保留键名 |
shuffle() |
- |
计算数组中的单元数目或对象中的属性个数 |
count() |
- |
返回一个键值反转后的数组 |
array_flip() |
- |
返回数组所有的键,组成一个数组 |
array_keys() |
- |
返回数组中所有值,组成一个数组 |
array_values() |
- |
返回一个元素顺序相反的数组键名和键值依然匹配 |
array_reverse() |
- |
统计数组中所有的值出现的次数 |
array_count_values() |
- |
从数组中随机抽取一个或多个元素,注意是键名 |
array_rand() |
- |
返回数组中当前的键/值对并将数组指针向前移动一步 |
each() |
- |
删除重复值,返回剩余数组 |
array_unique() |
- |
排序
含义 |
PHP |
Golang |
排序 |
- |
- |
按升序对给定数组的值排序,不保留键名 |
sort() |
sort.Strings(s) |
对数组逆向排序,不保留键名 |
rsort() |
- |
对数组排序,保持索引关系 |
asort() |
- |
对数组逆向排序,保持索引关系 |
arsort() |
- |
按键名对数组排序 |
ksort() |
- |
将数组按照键逆向排序 |
krsort() |
- |
用自然顺序算法对数组中的元素排序 |
natsort() |
- |
自然排序,不区分大小写 |
natcasesort() |
- |
sort.Slice(people, func(i, j int) bool {
return people[i].Age > people[j].Age
})
文件
含义 |
PHP |
Golang |
文件路径 |
- |
- |
返回路径中的目录部分 |
dirname() |
path.Dir() |
返回路径中的文件名部分 |
basename() |
path.Base() |
打开文件或者 URL |
fopen() |
f, err :=os.OpenFile() |
关闭一个已打开的文件指针 |
fclose() |
f.Close |
检查文件或目录是否存在 |
file_exists() |
- |
打开文件或者 URL |
fopen() |
os.OpenFile() |
关闭一个已打开的文件指针 |
fclose() |
(os.OpenFile())File.Close |
检查文件或目录是否存在 |
file_exists() |
os.IsExist |
取得文件大小 |
filesize() |
fileInfo, err = os.Stat("text.txt"); fileInfo.Size() |
判断给定文件是否可读 |
is_readable() |
file, err := os.OpenFile("1.txt", os.O_RDONLY, 0666); os.IsPermission(err) |
判断给定文件是否可写 |
is_writable() |
file, err := os.OpenFile("1.txt", os.O_WRONLY, 0666); os.IsPermission(err) |
判断给定文件是否可执行 |
is_executable() |
- |
获取文件的创建时间 |
filectime() |
os.Chtimes |
获取文件的修改时间 |
filemtime() |
os.Chtimes |
获取文件的上次访问时间 |
fileatime() |
os.Chtimes |
获取文件大部分属性值 |
stat() |
os.Stat("text.txt") |
写入文件 |
fwrite() |
(os.OpenFile())file.WriteString("xxx") |
写入文件(同上) |
fputs() |
(同上) |
读取文件 |
fread() |
(os.OpenFile())bufio.NewReader(file).ReadString('\n') //表示每读到\n就停止 |
检测文件指针是否到了文件结束的位置 |
feof() |
- |
从文件指针中读取一行 |
fgets() |
(os.OpenFile())bufio.NewReader(file).ReadString('\n') |
从文件指针中读取字符 |
fgetc() |
- |
把整个文件读入一个数组中 |
file() |
- |
输出一个文件 |
readfile() |
- |
将整个文件读入一个字符串 |
file_get_contents() |
- |
将一个字符串写入文件 |
file_put_contents() |
- |
返回文件指针读/写的位置 |
ftell() |
- |
在文件指针中定位 |
fseek() |
(os.OpenFile())File.Seek() |
倒回文件指针的位置 |
rewind() |
- |
轻便的执行文件锁定 |
flock() |
- |
返回路径中的文件名部分 |
basename() |
path.Base() |
返回路径中的目录部分 |
dirname() |
path.Dir("/a/b/c") |
返回文件路径的信息 |
pathinfo() |
- |
打开目录句柄 |
opendir() |
- |
从目录句柄中读取条目 |
readdir() |
ioutil.ReadDir(myfolder) |
关闭目录句柄 |
closedir() |
- |
新建目录 |
mkdir() |
os.MkdirAll() |
删除目录 |
rmdir() |
os.RemoveAll() |
删除文件 |
unlink() |
os.Remove("text.txt") os.RemoveAll |
拷贝文件 |
copy() |
io.Copy() |
重命名一个文件或目录 |
rename() |
os.Rename() |
判断文件是否是通过 HTTP POST上传的 |
is_uploaded_file() |
- |
将上传的文件移动到新位置 |
move_uploaded_file() |
- |
时间
含义 |
PHP |
Golang |
时间 |
- |
- |
Unix 时间戳 |
time() |
time.Now().Unix() |
取得一个日期的 Unix 时间戳 |
mktime() |
time.Date(2022,2,7, 14, 30, 1, 0,time.Local).Unix() |
格式化一个本地时间/日期 |
date() |
time.Now().Format("2006-01-02 15:04:05") |
验证一个格里高里日期 |
checkdate() |
- |
设定用于一个脚本中所有日期时间函数的默认时区 |
date_default_timezone_set() |
- |
取得日期/时间信息 |
getdate() |
time.Unix(int64(timeStamp),0).Format("2006-01-02 15:04:05") |
将任何英文文本的日期时间描述解析为 Unix 时间戳 |
strtotime() |
time.ParseInLocation() |
返回当前 Unix 时间戳和微秒数 |
microtime() |
time.Now().UnixMicro() |
时间过去了多久 |
- |
time.Since(t) |
日志
含义 |
PHP |
Golang |
- |
- |
log.New(os.Stdout, "", log.Lshortfile |log.Ldate |log.Ltime) |
- |
- |
log.SetOutput(logFile) |
- |
- |
log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate) |
- |
- |
log.SetPrefix("[小王子]") |
- |
- |
log.Println("这是一条很普通的日志。") |
反射
含义 |
PHP |
Golang |
- |
- |
reflect.TypeOf() |
- |
- |
reflect.ValueOf() |
- |
- |
reflect.TypeOf().Kind() |
- |
- |
reflect.ValueOf().NumField() |
- |
- |
reflect.ValueOf().Field() |
命令行工具
含义 |
PHP |
Golang |
命令行参数 |
- |
os.Args() |
合法字符串 |
- |
flag.StringVar() |
1234、0664、0x1234等类型,也可以是负数。 |
- |
flag.IntVar() |
1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False。 |
- |
flag.BoolVar() |
任何合法的时间段字符串。如”300ms”、”-1.5h”、”2h45m”。合法的单位有”ns”、”us” /“µs”、”ms”、”s”、”m”、”h”。 |
- |
flag.DurationVar() |
//定义命令行参数方式
var name string
var age int
var married bool
var delay time.Duration
flag.StringVar(&name, "name", "张三", "姓名")
flag.IntVar(&age, "age", 18, "年龄")
flag.BoolVar(&married, "married", false, "婚否")
flag.DurationVar(&delay, "d", 0, "延迟的时间间隔")
//解析命令行参数
flag.Parse()
fmt.Println(name, age, married, delay)
//返回命令行参数后的其他参数
fmt.Println(flag.Args())
//返回命令行参数后的其他参数个数
fmt.Println(flag.NArg())
//返回使用的命令行参数个数
fmt.Println(flag.NFlag())
$ ./flag_demo -help
Usage of ./flag_demo:
-age int
年龄 (default 18)
-d duration
时间间隔
-married
婚否
-name string
姓名 (default "张三")
$ ./flag_demo -name 沙河娜扎 --age 28 -married=false -d=1h30m
沙河娜扎 28 false 1h30m0s
[]
0
4
channel
ch := make(chan int)
ch := make(chan int, 10)
close(ch)
//读channel
for x := range ch {
fmt.Println(x)
}
<- ch
//写channel
ch <- 1
ch <- 2
ch <- 3