【字节青训营-后端专场】Go 语言上手 - 基础语言

变量声明

切片:可变长度数组

c:=make([]string,3)
good:=[]string{"a","b","c","d"}
append(s,"d")    //增补
s[2:5]           //第(2,3,4)个元素

map:

make(map[string]int)            string-int
删除:delete(m,"one")
遍历:无序

range:

nums:=[]int{2,3,4}
for i,num := range nums{
}
m:=map[string]string{"a":"A","b":"B"}
for k,v := range m{
}
for k:=range m{
}

函数:

func add(a int,b int)int{
}
func exists(m map[string]string,k string)(v string,ok bool){
}
指针:
func add2(n int){
    n+=2
}
func add2ptr(n *int){
    *n+=2
}
add2(n)
add2ptr(&n)

结构体:

type user struct{
    name string
    password string
}

a:=user{name:"wang",password:"1024"}//指定名字可以只指定一部分
b:=user{"wang","1024"}
b.name="...."

结构体方法:类似类成员函数

func (u user) checkPassword(password string)bool{
}
func (u *user) checkPassword(password string)bool{
//带指针才能对结构体成员进行修改
}

a:=user{name:"wang",password:"1024"}
a.checkPassword("2048")

错误处理

err error
return v,nil
return nil,errors.New("not found")

fmt.Println(err)

字符串操作

字符串格式化

fmt.Println()
fmt.Printf("%d") %v %+v %#v

JSON操作

时间处理

数字-字符串转换

f,_:=strconv.ParseFloat("1.234",64)
n,_:=strconv.ParseInt("111",10,64)//十进制 64位精度
n,_:=strconv.ParseInt("0x1000",0,64)//自动选择进制
n2,_:=strconv.Atol("123")

进程信息


读取用户输入

reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
   fmt.Println("An error occured while reading input. Please try again", err)
   return
}
input = strings.TrimSuffix(input, "\n")

guess, err := strconv.Atoi(input)
if err != nil {
   fmt.Println("Invalid input. Please enter an integer value")
   return
}
fmt.Println("You guess is", guess)

实现命令行词典

一个小爬虫项目
注:有道有反爬虫,爬不下来

1.抓包

浏览器F12进入检查,查看网络/Network
在原翻译界面输入词后点击翻译,抓到很多包,查找到请求方法为POST的包,且负载中有相应查询词的信息

2.获取相应发包代码

通过如下方式获取发包的命令行代码

利用Convert curl commands to code (curlconverter.com)将命令行代码自动生成go代码 运行该代码可以获得完整的json

3.生成包信息的结构体

获取json

利用JSON转Golang Struct - 在线工具 - OKTools将json转换为结构体(嵌套和展开都可以 只要最后能够通过json找到对应需要的值即可)

4.修改代码

考虑我们想要输入任意词获得结果,我们将之前的代码写入Query函数中
注意传参和发包时传词
Query函数增加代码如下

//fmt.Printf("%s\n", bodyText)
if resp.StatusCode != 200 {
   log.Fatal("bad StatusCode:", resp.StatusCode, "body", string(bodyText))
}
var dictResponse trans
err = json.Unmarshal(bodyText, &dictResponse)
if err != nil {
   log.Fatal(err)
}
fmt.Println(word)
for _, item := range dictResponse.Data.Explain.Translation {//此处需要根据结构体的具体结构来写
   fmt.Println(item)
}

主函数

  if len(os.Args) != 2 {
      fmt.Fprintf(os.Stderr, `usage: simpleDict WORD
example: simpleDict hello
      `)
      os.Exit(1)
   }
   word := os.Args[1]
   Query360(word)

运行结果如下(程序爬了两个网站故有两段答案)

posted @ 2022-05-08 23:21  Frozen_Heart  阅读(104)  评论(0编辑  收藏  举报