语言基础
-
Go 语言在C语言的基础上 进行了大幅度的简化,学习容易
-
垃圾回收:
- 写代码是无需考虑垃圾回收,类似JAVA
-
指针pointer:
- &传参数
- *接收参数
- 用pointer可改变结构体内容、值
-
fmt.Printf
-
"%v": 反应任意类型的变量,而不需要区分,如数字用%d或字符串用%s
-
"%+v"、"%#v"可获取更详细的信息:(e.g. p:= point{1, 2})
- "%+v": {x:1, y:2}
- "%#v": main.point{x:1, y:2}
-
打印小数后几位
- "%.2f" // 保留两位小数
-
-
JSON结构体
- 首字母大写
- 可用json.Marshal序列化,后用string()打印出,否则回答出遗传编码
- 可用json.Unmarshal反序列化,传入空值b中 json.Unmarshal(buf, &b)
-
Time
- t.format参数用一个具体的时间
- 可用Unix()获得时间戳
-
类型转换
-
可用 ParseFloat/ParseInt 进行转换
-
Atoi (String -> Integer) / Itoa(Integer -> String)
-
实战案例
guessing-game
-
随机数 math/rand
-
需设置随机数种子 rand.Seed(time.Now().UnixNano()),否则每次都会生成同一个数,一般使用当前时间的时间戳
-
读取输入可以用os.Stdin
-
E.g.
-
'''
-
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.Trim(input, "\r\n") // 将输入的字符串去空格去转换符
-
guess, err := strconv.Atoi(input) // 将字符串转换为整型数值
-
if err != nil { // 若不能转换,则报错
-
fmt.Println("Invalid input. Please enter an integer value")
-
return
-
}
-
'''
-
-
while(true) -> for{ if(```) break }
simple-dict
调用第三方api,接受http请求
- 将curl命令转换为go -> curlconverter.com
- 写结构体与response一一对应(繁琐且容易出错),代码生成(解析responce body) -> oktools.net/json2go
代码流程:
'''
// 创建请求
// data是流 占用内存少
var data = bytes.NewReader(buf) // 此处返回byte数组
req, err := http.NewRequest("POST", "api.interpreter.caiyunai.com/v1/dict", data)
if err != nil {
log.Fatal(err)
}
if err != nil {
log.Fatal(err)
}
//设置请求头
....
// 发起请求
resp, err := client.Do(req)
if err != nil { // 连接失败的话
log.Fatal(err) // 退出进程
}
defer resp.Body.Close() // 返回同样是个流,close防止泄露
bodyText, err := ioutil.ReadAll(resp.Body) // 把流读到内存
if err != nil {
log.Fatal(err)
}
// 反序列化,解析responce
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
var dictResponse DictResponse
err = json.Unmarshal(bodyText, &dictResponse) // 反序列化
if err != nil {
log.Fatal(err)
}
fmt.Printf("%#v\n", dictResponse)
'''