Go语言基础|青训营笔记

117 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

  • golang为强类型语言,所有变量都有其类型。
  • string可以用+拼接,可以用=直接判断相等。
  • 变量声明:
    • var name (type) = value 自动推导类型
    • name := value
    • const name (type) = value 常量声明,根据上下文推导变量类型
  • 没有while循环,只有for循环
  • switch 不需要显式加break
  • 数组
    • var a [num]int
    • b := [num]int{0,0,0}
    • var twoD [row][col]int
  • 切片/slice
    • s:= make([]string, len)
    • s = append(s,"d") 追加元素,需要赋值给原切片,因为追加时若发生扩容,会返回一个新切片。
    • copy(c,s) 切片拷贝
    • s[start:end] [start,end)
  • map
    • m:= make(map[keyType]valueType)
    • r, ok := m[key]
    • delete(m, key)
  • range
    • for i,num := range nums 遍历数组
    • for k,v := range m 遍历map
  • 函数
    • func add(a int, b int)(v int, ok bool){}
  • 指针
    • 传参 避免某些大值的拷贝开销
  • 结构体
    • type user struct{
      name string
      password string }
    • func (u *user) resetPassword(password string){
      u.password = password
      }
  • 字符串格式化
    • fmt.Printf("p=%v\n",p) p={1,2}
    • fmt.Printf("p=%+v\n",p) p={x:1,y:2}
    • fmt.Printf("p=%#v\n",p) p=main.Point{x:1,y:2}
  • Json
    • 结构体变量大写字母开头,可以序列化为Json格式
      • buf, err := json.Marshal(a)
      • fmt.Println(string(buf))
    • 反序列化
      • var b userInfo
      • err = json.Unmarshal(buf,&b)
      • fmt.Printf("#{b}\n")
  • 实战-guessingGame
    • rand.Intn(n),需要设置随机数种子,不然会一直随机出同一个数,一般是用程序启动时间.
      • rand.Seed(time.Now().UnixNano())
    • 命令行读入
      • reader := bufio.NewReader(os.Stdin)
      • input, err := reader.ReadString('\n') 按行读取
      • input = strings.TrimSuffix(input,'\n') 截去换行符
      • guess, err := strconv.Atoi(input) 将字符串转换为数字
  • 实战-simpleDict
  • 实战-Socket5
    • 请求阶段 connect函数
    • relay阶段
  • Q&A
    • 写代码时不需要首先考虑性能问题,只需要对热点代码进行性能修复。
  • homework
    • fmt.Scanf 接收两个参数,第一个参数用于每个给定元素的不同格式,第二个参数接收每个给定元素
    • 因为guessingGame接收数字,所以使用_, err := fmt.Scanf("%d",&guess)即可
    • 选用火山翻译作为第二个翻译引擎,request中包括text,language两个字段。
    • 首先获取调用api时发送与返回的请求类型,构造相应的结构体,通过序列化与反序列化将其转换成json格式。
    • 并发:使用waitGroup实现
    wg:= sync.WaitGroup{}
    wg.Add(2)
    go func(){
       dictResponse = queryCloud(word)
       wg.Done()
    }()
    go func(){
       volcanoResponse = queryVolcano(word)
       wg.Done()
    }()
    wg.Wait()