【字节青训营-后端专场】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)
运行结果如下(程序爬了两个网站故有两段答案)