知识点: 1.常见的数据类型包括字符串、整数、浮点型、布尔型 2.变量的声明主要有两种方式 1.var 2.:= 3.常量没有确定的类型,会根据上下文自动确定数据类型 4.golang既没有while循环,也没有do while循环,只有唯一的for循环 5.数组其实不常用,因为数组的长度是确定的,在golang里经常用切片 6.可以用append在切面的后面进行追加值 7.利用copy可以复制一份列表 8.golang里面的range,可以用来遍历数组与map,如果是数组就是索引与对应的值,如果是9.map的话就是key与value 10.map是golang语言使用最频繁的数据结构,可以用delete删除map种的数据 11.结构体函数类似于成员函数 12.go语言也支持指针 13.函数里,变量类型是后置的,返回值也是后置的 14.nil表示0值或者空值 15.strings.Replace(t, "l", "L", -1)方法的意思是:将老字符串出现的第一个参数用第二个参数替换n次,如果n<0,替换次数没有限制 16go语言可以直接定义一个切片 代码: `package main
import ( "errors" "fmt" "math" "strings" ) func main() { `
var a int = 3
var c = "init"
fmt.Println(c)
b := 3
fmt.Println(a == b)
fmt.Println(math.Sin(3))
fmt.Println(a, b)
const e = 3
fmt.Print(e)
if a == b {
fmt.Print("right")
} else {
fmt.Print("false")
}
for {
fmt.Println("loop")
break
}
//下面是一个正常的for循环
for j := 7; j < 9; j++ {
fmt.Println(j)
}
//下面练习以下continue关键字
for j := 1; j < 10; j++ {
if j%2 == 0 {
continue
} else {
fmt.Println(j)
}
}
//下面来一波数组
var arr [5]int
arr[4] = 100
fmt.Print(arr[4], len(arr))
//
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println(s[0], s[1], s[2])
fmt.Println("len:", len(s))
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s)
r := make([]string, len(s))
copy(r, s)
fmt.Println(r)
//切片的使用方式和python类似
fmt.Println(r[1:4])
//
good := []string{"a", "b"}
fmt.Println(good)
g := make(map[string]int)
g["one"] = 1
g["two"] = 2
delete(g, "one")
fmt.Println(g["one"])
p, q := 2, 3
fmt.Println(p, q)
map1 := map[string]int{"one": 1, "two": 2}
var map2 = map[string]int{"one": 1, "two": 2}
fmt.Println(map1, map2)
//
nums := []int{1, 2, 3}
for i, n := range nums {
fmt.Println(i, n)
}
map3 := map[string]int{"yushuobo": 1, "Wangxinlong": 2}
for k, v := range map3 {
fmt.Println(k, v)
}
fmt.Println(add(3, 4))
var v, ok = exists(map[string]string{"A": "a", "B": "b"}, "A")
fmt.Println(v, ok)
var g1 = 1
add3(&g1)
fmt.Println(g1)
//还支持结构体
user1 := user{name: "zhangfei", password: "123"}
fmt.Println(user1)
//
//nil表示空值或0值
u1, err := findUser([]user{{"zhangsan", "123"}}, "zhangsan1")
fmt.Println(u1, err)
//有超多的操作字符串的函数
t := "Hellow"
fmt.Println(strings.Contains(t, "ll")) //原来的字符串是否有子字符串
fmt.Println(strings.HasPrefix(t, "l")) //是否以此为开始
fmt.Println(strings.HasSuffix(t, "llo")) //是否以此为结束
fmt.Println(strings.Count(t, "l")) //计数
fmt.Println(strings.Index(t, "l"))
fmt.Println(strings.Join([]string{"a", "b"}, "-"))
fmt.Println(strings.Repeat(t, 2))
fmt.Println(strings.Replace(t, "l", "L", -1)) //如果n<0,替换次数没有限制,否则替换n次
fmt.Println(strings.Split("a-b-c", "-"))
fmt.Println(len(t))
`} func findUser(users []user, name string) (v *user, err error) { for _, u := range users { if u.name == name { return &u, nil } } return nil, errors.New("not find") } func add(a int, b int) int { return a + b } func exists(m map[string]string, k string) (v string, ok bool) { v, ok = m[k] return v, ok } func add2(a int) { a++ } func add3(a *int) { *a++ }
type user struct { name string password string }`