这篇文章会不断的更新,我会记录我在使用过程中一时想不起的语法。
数组
//给二维数组中追加值
var ResRow [][]int
res_col := make([]int, len)
ResRow = append(ResRow,res_col)
二维数组初始化值
row, column := 3, 4
var answer [][]int
for i := 0; i < row; i++ {
inline := make([]int, column)
answer = append(answer, inline)
}
fmt.Println(answer)
// 方法1
answer1 := make([][]int, row)
for i := range answer1 {
answer1[i] = make([]int, column)
}
fmt.Println(answer1)
深度比较多维数组
reflect.DeepEqual(y, table.y)
字符串处理
//替换 -1 代表全部,其他大于-1的数字代码替换前几个匹配的
newStr := strings.Replace(s, old, new, -1 )
快速拼接
var buffer bytes.Buffer
buffer.WriteString("")
return buffer.String()
切割/分割
var res []string
res = range strings.Split(path,"/")
组合
strings.Join(res,"/")
集合操作
map
//声明后再赋值
m1 := make(map[string]string)
m1["name"] = "编程三分钟"
fmt.Println(m1["name"])
//声明时赋值
m1 := map[string]string{
"name":"编程三分钟",
}
fmt.Println(m1["name"])
map的遍历
// 需要携带 value
for name,score := range fruits{
fmt.Println(name, score)
}
// 只需要key
for name := range fruits{
fmt.Println(name)
}
map中是否存在某个key
//这也是If的一种不错的用法
if _,ok := map1[key1];ok {
//....
}
删除key,不存在也不会报错
delete(map1,"coding3min")
结构体
定义结构体
// Person 为用户定义的一个类型
type Person struct {
Name string
Age int
Email string
}
//简单写法
type T struct { a, b int }
字段标记
在定义结构体时还可以为字段指定一个标记信息:
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}
这些标记信息通过反射接口可见,并参与结构体的类型标识,但在其他情况下被忽略。
赋值
//一般赋值
var p Person
p.Name = "nick"
p.Age = 28
//快速赋值
// 声明 Person 类型的变量,并初始化所有字段
nick := Person{
Name: "nick",
Age: 28,
Email: "nickli@xxx.com",
}
//一行赋值(注意顺序必须与声明一致)
nick := Person{"nick", 28, "nickli@xxx.com"}
//结构体数组赋值,常用于写测试用例
tables := []struct {
x string
y bool
}{
{"([)]", false},
{"{}[]()", true},
}
类型转换
数字与字符串
//int to string
resString := strconv.Itoa(1)
//各种类型转字符串
resString := fmt.Sprintf("%d %v %v", 1, "coding3min", true)
int, err := strconv.Atoi(string)
int64, err := strconv.ParseInt(string, 10, 64)
string := strconv.FormatInt(int64,10)
string与byte、rune的转换
rune
可以理解为c
中的char
//string to bytes
resBytes := []byte("asdfasdf")
//bytes to string
resString := string(resBytes)
//string to rune
r := []rune(str)
//rune to string
str = string(r)
循环
for 循环
for i := 0; i < 10; i++ {
fmt.Printf("%d ", i)
}
//死循环
for {
break;
}
foreach
//遍历key value 注意复制的是副本
for k, v := range x {
fmt.Println(x[k]==v)
}
//遍历key
for k := range x {
fmt.Println(x[k])
}
json
序列化和反序列化
//生成json对象(map类型)
resJsons, err := json.Marshal(&jsonStruct)
//转string
req_str = string(resJsons)
//反序列化
err := json.Unmarshal([]byte(req_str), &jsonStruct)
数据处理
保留两位小数
func Decimal(value float64) float64 {
value, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", value), 64)
return value
}
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
评论