这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
基础语法
数据类型:常量、变量、数组、切片\
条件语句、循环语句、swich条件选择语句
package main
import (
"fmt"
"math"
"time"
)
func main() {
//变量
fmt.Println("Hello world!")
var a = "initial"
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, b, c, d, e, f)
fmt.Println(g)
const s string = "constant"
const h = 5000000
const i = 3e20 / h
fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
//条件语句
if num := 9; num < 0 {
fmt.Println(num, "is negative!")
} else {
fmt.Println(num, "ringht!")
}
t := time.Now()
//循环语句
//条件选择语句
switch {
case t.Hour() < 12:
fmt.Println("It's before noon.")
default:
fmt.Println("It's after noon.")
}
var j [5]int
j[4] = 100
var k = [3]int{1, 2, 3}
fmt.Println(k)
}
使用make制作切片
package main
import "fmt"
func main() {
s := make([]string, 3) //使用make制作切片
s[0] = "a"
s[1] = "b"
s[2] = "c"
c := make([]string, 3)
copy(c, s)
fmt.Println(s, c)
good := []string{"g", "o", "0", "d"}
fmt.Println(good)
}
map用法(类似于字典、哈希)
package main
import "fmt"
func main() {
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
m["three"] = 3
fmt.Println(m, m["one"], m["unknown"])
r, ok := m["un"] //加一个ok用来获取键值对中有没有“key”存在
fmt.Println(r, ok)
delete(m, "one")
fmt.Println(m) //golang语言中,元素顺序是随机的
m1 := map[string]int{"qaz": 110, "wsx": 120}
fmt.Println(m1)
}
range用法
package main
import (
"fmt"
)
func main() {
nums := []int{2, 3, 4}
sum := 0
//遍历数组时,每次遍历返回索引值i,返回值num
for i, num := range nums {
sum += num
if num == 2 {
fmt.Println("index:", i, "values:", num)
}
}
fmt.Println(sum)
m := map[string]string{"A": "a", "B": "b"}
//遍历map时,每次遍历返回key值k,返回value值v
for k, v := range m {
fmt.Println(k, v)
}
//遍历map时,首先返回键值
for k := range m {
fmt.Println("key", k)
}
}
函数:go语言中的函数大多返回多个值,第一个为默认的正确值,第二个值大多为错误信息。
package main
import "fmt"
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, b int) int {
return a + b
}
func main() {
res := add(1, 2)
fmt.Println(res)
//加上ok,检查ok对应的键存在不存在
v, ok := exists(map[string]string{"A": "a"}, "a")
fmt.Println(v, ok)
}
指针用法:
package main
import "fmt"
func add2(n int) {
n += 2
}
func add2ptr(n *int) {
*n += 2
}
func main() {
n := 5
add2(n)
fmt.Println(n)
add2ptr(&n)
fmt.Println(n)
}
结构体用法:
package main
import "fmt"
type user struct {
name string
password string
}
func main() {
a := user{
name: "wxw",
password: "qaz11111111",
}
b := user{"zhuxian", "12345"}
c := user{password: "1111"}
c.name = "wwsx"
fmt.Println(a, b, c)
fmt.Println(checkPassword(a, "haha"))
}
func checkPassword(u user, password string) bool {
return u.password == password
}
错误处理: 返回错误,并用if-else语句输出错误
package main
import (
"errors"
"fmt"
)
type user struct {
name string
password string
}
//返回错误 //使用error进行返回错误处理
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 found")
}
func main() {
a := user{
name: "wxw",
password: "qaz11111111",
}
b := user{"zhuxian", "12345"}
c := user{password: "1111"}
c.name = "wwsx"
fmt.Println(a, b, c)
fmt.Println(checkPassword(a, "haha"))
//错误处理部分
u, err := finduser([]user{a, b}, "wxw")
//进行错误处理
if err != nil {
fmt.Println(err)
return
}
fmt.Println(u.name)
}
func checkPassword(u user, password string) bool {
return u.password == password
}
字符串操作:
package main
import (
"fmt"
"strings"
)
func main() {
a := "hello"
fmt.Println(strings.Contains(a, "ll")) //判断字符串a中是否包含另一个字符串
fmt.Println(strings.Count(a, "l")) //求某个字符的个数
fmt.Println(strings.Index(a, "ll")) //查找某个字符串的位置
fmt.Println(strings.Join([]string{"he", "llo"}, "-")) //用-连接多个字符串
fmt.Println(strings.Repeat(a, 2)) //将字符串连续重复多遍
fmt.Println(strings.Split("a-b-c", "-")) //切片操作
fmt.Println(strings.ToLower(a)) //转小写
fmt.Println(strings.ToUpper(a)) //转大写
fmt.Println(len(a)) //获取字符串长度
b := "你好"
fmt.Println(len(b)) //一个中文对应多个字符
}
字符串格式化:
package main
import "fmt"
type point struct {
x, y int
}
func main() {
s := "hello"
n := 123
p := point{1, 2}
fmt.Println(s, n)
fmt.Println(p)
//%v可以区分任何类型的变量
fmt.Println("s=%v\n", s)
fmt.Println("n=%v\n", n)
fmt.Println("p=%v\n", p)
fmt.Println("p=%+v\n", p) //输出p的具体格式
fmt.Println("p=%#v\n", p) //输出p的所有格式
f := 3.141592653
fmt.Println("%.2f\n", f)
}