go入门
数据类型
强类型语言
布尔型
布尔型的值只可以是常量 true 或者 false。
一个简单的例子:var b bool = true。
数字类型
整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
字符串类型
字符串就是一串固定长度的字符连接起来的字符序列。
派生类型:
包括:
(a) 指针类型(Pointer)
(b) 数组类型
(c) 结构化类型(struct)
(d) Channel 类型
(e) 函数类型
(f) 切片类型
(g) 接口类型(interface)
(h) Map 类型
变量声明
var XXX=值;
f:=值
条件语句
if
if后必须+{}
package main
import "fmt"
func main() {
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
}
output
***
7 is odd
***
switch
默认不需加break 其他和c++类似
循环语句
只有for循环
package main
import "fmt"
func main() {
for j := 7; j < 9; j++ {
fmt.Printf("%d\n", j);
}
}
output
****
7
8
***
函数
/*
func 函数名(x XXX,x XXX) (x XXX,x XXX){
return RES,ok;
}
x:变量名 XXX类型名 可以有俩返回值或一个
*/
}
func hanshu_name(a int,b int) int {
return a+b;
}
//支持递归
func recursion() {
recursion() /* 函数调用自身 */
}
func main() {
recursion()
}
指针
主要用途对传入的对象进行修改 和c一样有&和*进行传入和解引用
package main
import "fmt"
func hanshu_name(n *int){
*n+=2
}
func main() {
n := 1
hanshu_name(&n);
fmt.Println(n);//输出3
}
结构体
package main
import "fmt"
type user struct {
name string
password string
}
//这里为结构体中的函数
func (u user) checkPassword(password string) bool {
return u.password == password
}
func (u *user) resetPassword(password string) {
u.password = password
}
func main() {
a := user{name: "wang", password: "1024"}
a.resetPassword("2048")
fmt.Println(a.checkPassword("2048")) // true
}
错误处理
函数返回值返回错误
字符串操作
常用函数
不记得查就行
a := "hello"
fmt.Println(strings.Contains(a, "ll")) // true
fmt.Println(strings.Count(a, "l")) // 2
fmt.Println(strings.HasPrefix(a, "he")) // true
fmt.Println(strings.HasSuffix(a, "llo")) // true
fmt.Println(strings.Index(a, "ll")) // 2
fmt.Println(strings.Join([]string{"he", "llo"}, "-")) // he-llo
fmt.Println(strings.Repeat(a, 2)) // hellohello
fmt.Println(strings.Replace(a, "e", "E",0)) // hEllo
fmt.Println(strings.Split("a-b-c", "-")) // [a b c]
fmt.Println(strings.ToLower(a)) // hello
fmt.Println(strings.ToUpper(a)) // HELLO
fmt.Println(len(a)) // 5
fmt.Println(strings.TrimSpace(" d\n")) //d 删除前后的空格及换行符等
字符串格式化:
json操作
序列化
import (
"encoding/json"
)
type userInfo struct {
Name string
Age int `json:"age"`
Hobby []string
}
a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
buf, err := json.Marshal(a)
fmt.Println(string(buf)) // {"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]}
反序列化
var b userInfo
err = json.Unmarshal(buf, &b)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", b) // main.userInfo{Name:"wang", Age:18, Hobby:[]string{"Golang", "TypeScript"}}
时间处理
随机数种子
"time"中
now := time.Now()//随机数种子
fmt.Println(now) // 2022-03-27 18:04:59.433297 +0800 CST m=+0.000087933
t := time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC)
t2 := time.Date(2022, 3, 27, 2, 30, 36, 0, time.UTC)
fmt.Println(t) // 2022-03-27 01:25:36 +0000 UTC
fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute()) // 2022 March 27 1 25
fmt.Println(t.Format("2006-01-02 15:04:05")) // 2022-03-27 01:25:36
diff := t2.Sub(t)
fmt.Println(diff) // 1h5m0s
fmt.Println(diff.Minutes(), diff.Seconds()) // 65 3900
t3, err := time.Parse("2006-01-02 15:04:05", "2022-03-27 01:25:36")
if err != nil {
panic(err)
}
fmt.Println(t3 == t) // true
fmt.Println(now.Unix()) // 1648738080
进程信息
常用操作
打印当前进程号
fmt.Println(syscall.Getpid());
func (*Process) Kill 杀死进程
func (*Process) Release 释放进程资源
func (*Process) Signal 向进程发送信号
func (*Process) Wait 等待子进程退出,回收子进程,防止出现僵尸进程
常用数据结构
数组
一维数组声明:var a [5]int
二维数组声明:var twoD [2][3]int
切片(动态数组)
和python差不多但没D[-1]操作
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s) // [a b c d e f]
c := make([]string, len(s))
copy(c, s)
fmt.Println(c) // [a b c d e f]
fmt.Println(s[2:5]) // [c d e]
fmt.Println(s[:5]) // [a b c d e]
fmt.Println(s[2:]) // [c d e f]
good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]
map
键值对操作
m := make(map[string]int)//声明map[key的类型string]值的类型int
常用操作
package main
import "fmt"
func output(m map[string]int){
//遍历
for key, val := range m {
fmt.Println(key,val)
}
}
func main() {
m := make(map[string]int)//声明map[key的类型]值的类型
//增
m["two"] = 2
m["one"] = 1
//遍历
output(m)
//删
delete(m, "one")
output(m)
//改
m["one"]=11111
output(m)
}
简单项目
猜谜游戏
随机数
func get(maxNum int)(int){//得到【0,maxNum)的随机数
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
return secretNumber;
}
输入一个整数
func in()(int){
var input int;
fmt.Scanln(&input);
return input;
}
参考程序
package main
import (
"fmt"
"math/rand"
"time"
)
func get(maxNum int)(int){
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
return secretNumber;
}
func in()(int){
var input int;
fmt.Scanln(&input);
return input;
}
func main() {
secretNumber := get(100);
fmt.Println(secretNumber);
fmt.Println("Please input your guess")
for {
guess:=in();
fmt.Println("You guess is", guess)
if guess > secretNumber {
fmt.Println("Your guess is bigger than the secret number. Please try again")
} else if guess < secretNumber {
fmt.Println("Your guess is smaller than the secret number. Please try again")
} else {
fmt.Println("Correct, you Legend!")
break
}
}
}
在线词典
抓包
代码生成
点击copy
生成代码网站地址
json生成request body
参考代码
caiyunapp
有道云
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"bufio"
"os"
"strings"
)
type DictRequest struct {
TransType string `json:"trans_type"`
Source string `json:"source"`
UserID string `json:"user_id"`
}
type DictResponse struct {
Rc int `json:"rc"`
Wiki struct {
KnownInLaguages int `json:"known_in_laguages"`
Description struct {
Source string `json:"source"`
Target interface{} `json:"target"`
} `json:"description"`
ID string `json:"id"`
Item struct {
Source string `json:"source"`
Target string `json:"target"`
} `json:"item"`
ImageURL string `json:"image_url"`
IsSubject string `json:"is_subject"`
Sitelink string `json:"sitelink"`
} `json:"wiki"`
Dictionary struct {
Prons struct {
EnUs string `json:"en-us"`
En string `json:"en"`
} `json:"prons"`
Explanations []string `json:"explanations"`
Synonym []string `json:"synonym"`
Antonym []string `json:"antonym"`
WqxExample [][]string `json:"wqx_example"`
Entry string `json:"entry"`
Type string `json:"type"`
Related []interface{} `json:"related"`
Source string `json:"source"`
} `json:"dictionary"`
}
func query_caiyunai(word string){
word=strings.TrimSpace(word) //调用TrimSpace方法删除前后的空格及换行符等
fmt.Println(word);
client := &http.Client{}
request := DictRequest{TransType: "en2zh", Source:word}
buf, err := json.Marshal(request)//序列化
if err != nil {
log.Fatal(err)
}
var data = bytes.NewReader(buf)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Connection", "keep-alive")
req.Header.Set("DNT", "1")
req.Header.Set("os-version", "")
req.Header.Set("sec-ch-ua-mobile", "?0")
req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36")
req.Header.Set("app-name", "xy")
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
req.Header.Set("Accept", "application/json, text/plain, */*")
req.Header.Set("device-id", "")
req.Header.Set("os-type", "web")
req.Header.Set("X-Authorization", "token:qgemv4jr1y38jyq6vhvi")
req.Header.Set("Origin", "https://fanyi.caiyunapp.com")
req.Header.Set("Sec-Fetch-Site", "cross-site")
req.Header.Set("Sec-Fetch-Mode", "cors")
req.Header.Set("Sec-Fetch-Dest", "empty")
req.Header.Set("Referer", "https://fanyi.caiyunapp.com/")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
req.Header.Set("Cookie", "_ym_uid=16456948721020430059; _ym_d=1645694872")
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)
}
//fmt.Printf("%s\n", bodyText)
var dictResponse DictResponse;
err=json.Unmarshal(bodyText,&dictResponse);
if err != nil {
log.Fatal(err)
}
fmt.Println(word, "UK:", dictResponse.Dictionary.Prons.En,"US:", dictResponse.Dictionary.Prons.EnUs)
for _, item := range dictResponse.Dictionary.Explanations {
fmt.Println(item)
}
}
func youdao(word string){
word=strings.TrimSpace(word) //调用TrimSpace方法删除前后的空格及换行符等
client := &http.Client{}
req, err := http.NewRequest("GET", fmt.Sprintf("https://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=%s", word), nil)
if err != nil {
log.Fatal(err)
}
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)
}
fmt.Printf("%s\n", bodyText)
}
func main() {
inputread:=bufio.NewReader(os.Stdin)//从标准键盘输入
fmt.Println("请输入查询的词:")
input,err:=inputread.ReadString('\n');
if err!=nil {//读入字符串,以换行符结束。并判断是否输入错误。
fmt.Printf("输入错误%s\n",err)
return
}
query_caiyunai(input);
fmt.Println("youdao");
youdao(input);
}
代理协议
本文作者:可可爱爱奇奇怪怪。。。
本文链接:https://www.cnblogs.com/ccsuf/p/16241952.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。