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);
}

代理协议

posted @ 2022-05-07 22:04  warmhearthhh  阅读(33)  评论(0编辑  收藏  举报