Go语言上手—基础语言 | 青训营笔记

67 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第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)
}