Go笔记1|青训营

109 阅读2分钟

简介

优点

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

基础

语法

package main  // 入口包(入口文件)
import {
	"fmt"  // 导入包
}
func main() {
	fmt.Println("hello world")
}

变量

强类型 var a = "initial" 自动推导类型 var b int = 1 显式 f := float32(e) const s string = "constant" const h = 500000000 常量根据使用上下文自动确定类型

if else

if 7%2 == 0 {  
fmt.Println("7 is even")  
} else {  
fmt.Println("7 is odd")  
}

循环

仅有for

for {  
fmt.Println("loop")  
break  
}  
for j := 7; j < 9; j++ {  
fmt.Println(j)  
}

switch

case 后默认跟break case 后可跟条件分支

switch {  
case t.Hour() < 12:  
fmt.Println("It's before noon")  
default:  
fmt.Println("It's after noon")  
}

数组

切片

可变长度数组 创建s := make([]string, 3) 追加s = append(s, "d")返回的类似指针,自动扩容 切片s[2:5] 不支持负数索引

map

创建m := make(map[string]int) map[key][value] 内部无序

range

遍历用

m := map[string]string{"a": "A", "b": "B"}  
	for k, v := range m {  
		fmt.Println(k, v) // b 8; a A  
	}

函数

可返回多个值,通常返回两个值(返回值和错误信息)

func exists(m map[string]string, k string) (v string, ok bool) {  
	v, ok = m[k]  
	return v, ok  
}

指针

同c

结构体

未赋值则自动化为空值

结构体方法

有点像类的方法

type user struct {  
	name string  
	password string  
}  

// 带指针则可修改结构体,反之不可
func (u user) checkPassword(password string) bool {  
	return u.password == password  
} 

func main() {  
	a := user{name: "wang", password: "1024"}  
	fmt.Println(a.checkPassword("2048")) // true  
}

错误处理

函数返回两个值中的其中一个代表错误,可通过errors.New("")创建

字符串操作

见包strings 注意中文长度

字符串格式化

%v 、%+v、%#v 自动,越来越详细

JSON

结构体公开字段首字母大写

type userInfo struct {  
	Name string  
	Age int `json:"age"`  //序列化后是小写,应该是重命名
	Hobby []string  
}

序列化buf, err := json.Marshal(a) 反序列化json.Unmarshal(buf, &b)

时间

见包time

数字解析

见包 strconv

进程信息

包os、os/exec

实战

猜数

简单 读取时可采用Scan(&input)

在线词典

defer

延迟调用机制,在函数执行完毕后逆序执行

百度api好像加密了,调取不到

调用api简单方法

  1. 抓取请求
  2. 将请求转为go代码
  3. 将JSON改为go代码
  4. 更改相应值
  5. 发送回去

SOCKS5 代理服务器

开一个防火墙端口

遇到的问题

  • Printf有格式化,Println没有