var bigArr []int{ ... } a := append([]int{}, bigArr[1:3]...)
map
拷贝
与slice类似,map也是一个指针,若要进行深拷贝,需要对逐个键值对进行拷贝:
1 2 3 4 5 6 7 8 9 10 11
m := map[int]string{1: "a", 2: "b", 3: "c"} mCopy := map[int]string{} for k, v := range m { mCopy[k] = v } m[4] = "d" fmt.Println(m) fmt.Println(mCopy)
// 输出:map[1:a 2:b 3:c 4:d] // map[1:a 2:b 3:c]
package
同一目录下的同级文件属于一个包,main.go可以直接调用其他文件中的函数,但是在运行的时候需要使用 go run .
SQL
动态条件
SQL查询时存在不定长的 WHERE 子句,例如定义这样一个查询条件的结构体:
1 2 3 4 5 6 7 8
type Query struct { Id *int64 FirstName *string MiddleName *string LastName *string AreaId *int64 Birthday *time.Time }
其中的每一个字段都不是必须存在于 WHERE 子句中的,这样就需要动态构造SQL语句,通过类似这种方式:
1 2 3 4 5 6 7 8 9 10
type Query map[string]interface{}
var model Query{} var values []interface{} var where []string for k, v := range model { values = append(values, v) where = append(where, fmt.Sprintf("%s = ?", k)) } string := ("SELECT name FROM users WHERE " + strings.Join(where, " AND "))