day1学习笔记 | 青训营

110 阅读3分钟

1 配置环境

配置完成后写hello world,出现

Build Error: go build -o e:\go\projects\src\first__debug_bin407375910.exe -gcflags all=-N -l . go: go.mod file not found in current directory or any parent directory; see 'go help modules' (exit status 1)

解决一:命令行:go mod init first

失败

解决二:在vscode的命令行输入

成功

2 基础语法

2.1 变量

var name type =value

name := value

const name type =value

2.2 if else

没有小括号

2.3循环

只有for循环

2.4 Switch

Switch后没有小括号

默认不写break

常用来替代多个if else

2.5 数组和切片

数组长度不可变,不常用

切边长度可变

语法:

s :=make([]string,3)
​
s=append(s,”d”)
​
fmt.Println(s[2:3])//起始处和终点处
​
c :=make([]string,len(s))
​
copy(c,s)
​
good :=[]string{"g","o","o","d"}
​

2.6 map

m :=make(map[string]int)
m["one"]=1
delete(m,"one")
​
r,ok:=m["two"];//r获取对应值,OK获取是否存在的布尔值
​
m2:=map[string]int{"one":1,"two":2}
​
var m3 =map[string]int{"one":1,"two":2}

2.7 range

range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。

package main
​
import "fmt"var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
​
func main() {
   for i, v := range pow {
      fmt.Printf("2**%d = %d\n", i, v)
   }
}

2.8 函数

func function_name( [parameter list] ) [return_types] {
   函数体
}
​

2.9 指针

func add2(n *int){
    *n+=2;
}
func main(){
    n:=5;
    add2(&n);//n=7
}

2.10 结构体

package main
​
import "fmt"type Books struct {
   title string
   author string
   subject string
   book_id int
}
​
func main() {
   var Book1 Books        /* 声明 Book1 为 Books 类型 */
   Book2:=Books{title:"xxx",anthor:"xxx"}
   Book3:=Books{"xxx","xxx"}
    
   /* book 1 描述 */
   Book1.title = "Go 语言"
   Book1.author = "www.runoob.com"
   Book1.subject = "Go 语言教程"
   Book1.book_id = 6495407
}

2.11 错误处理

result, err:= Sqrt(-1)
​
if err != nil {
   fmt.Println(err)
}
​

2.12 json

package main
​
import (
    "encoding/json"
    "fmt"
)
​
type userInfo struct {
    Name  string
    Age   int `json:"age"`
    Hobby []string
}
​
func main() {
    a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
    
    //关键
    buf, err := json.Marshal(a)
    if err != nil {
        panic(err)
    }
    
    fmt.Println(buf)         // [123 34 78 97...]
    
    //关键
    fmt.Println(string(buf)) // {"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]}
​
    buf, err = json.MarshalIndent(a, "", "\t")
    if err != nil {
        panic(err)
    }
    fmt.Println(string(buf))
​
    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"}}
}

2.13 时间处理

package main
​
import (
    "fmt"
    "time"
)
​
func main() {
    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
}

3 实战案例

猜数字报错:

Unable to process evaluate: debuggee is running

解决方案一 修改launch.json

"console": "integratedTerminal"

失败

解决方案二 在vscode终端用命令行运行go

go run guessNum.go

3.1 读入数据

reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n') //读取一行
if err != nil {
            fmt.Println("error:", err)
            return
        }
​
        input = strings.TrimSuffix(input, "\n") //去掉换行符
        input = strings.TrimSuffix(input, "\r") //去掉回车 
​
        guess, err := strconv.Atoi(input)
        if err != nil {
            fmt.Println("error:", err)
            return
        }
        fmt.Println("your guess is:", guess)