Go语言基础语法学习笔记 | 青训营

59 阅读3分钟

这是青训营Go语言基础语法课程自用笔记。

一、变量命名

有以下三种方法声明或定义变量:

    var s string  //仅声明
    var s = "hello"
    s := "hello"

二、输出与格式化

package main

import "fmt"

func main() {
    fmt.Print("Hello World")
    fmt.Println("Hello World")  //输出后换行
    a := point{1, 2}
    fmt.Println(a)    //{1 2}
    fmt.Printf("a = %v\n", a) //a = {1 2}
    fmt.Printf("a = %+v\n", a) //a = {x:1 y:2}
    fmt.Printf("a = %#v\n", a) //a = Course01.point{x:1 y:2}
    f := 3.1415926
    fmt.Printf("%.2f\n", f) //3.14
}

"fmt"为输出所用的包,其中

  1. Print函数仅输出不换行;
  2. Println函数输出并换行;
  3. Printf函数可将内容按一定格式输出,若输出的是结构体,则%v, %+v, %#v输出的结构体依次变得更具体;若为其他类型的变量,也可进行格式化输出。

运行时遇到的问题:运行‘go build xxxx/xxxx' 时出错

CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者

原因:在go中,应用程序的入口包要为main,而编译源码没有main包时,将无法编译输出可执行的文件

解决办法:将包名改为main即可,如果有多个包,只需存在一个main包即可

三、判断、循环、switch、数组

这三种语法与c++差别不大,去掉了括号

四、切片

  1. 创建切片:s := make([]string, 3)
  2. 在切片尾部新增元素s = append(s, "e", "f")(可同时新增多个元素)
  3. 且切片可按下标进行索引,用法与Python大致相同
  4. 获取切片中的元素个数(切片长度):len(s)
  5. 获取切片容量:cap(x)

五、Map

  1. 创建Map数组:m := make(map[string]int)
  2. 可在创建时加入元素:map[string]int{"one": 1, "two": 2}
  3. 删除元素可使用:delete(m, "one")

六、结构体

type std struct {
	name     string
	password string
}

func (u std) checkPW3(w string) bool {	//结构体方法
	return u.password == w
}

func (u *std) setPW4(w string) { //使用指针可在结构体方法中直接修改对象中的值
	u.password = w
}

在函数名前使用u 结构体名即可。

七、错误处理

  1. 在函数中可使用:func handler(users []user, name string) (v *user, err error) ,将错误与结果一并返回,若无错误则err == nil
  2. 可使用errors.New()创建错误报告

八、json处理

  1. 在结构体中使用json:"名字",则结构体转换为json格式后结构体变量名会转换为该名字,例如下例结构体转换为json后Age将变为age
type userInfo struct {
	Name  string
	Age   int `json:"age"` 
	Hobby []string
}
  1. 将结构体转化为json格式:buf, err := json.Marshal(a)
  2. 将json格式转化为结构体格式:err = json.Unmarshal(buf, &b)
  3. 结构体转换为格式化json:buf, err = json.MarshalIndent(a, "", "\t"),例:
a := userInfo{"wang", 18, []string{"b", "c"}}  //结构体a

//格式化输出结果
{                                                               
        "Name": "wang",                                         
        "age": 18,                                              
        "Hobby": [                                              
                "b",                                            
                "c"                                             
        ]                                                       
} 

九、数字处理

strconv包含许多数字处理函数,支持字符串转多进制数字。

  1. 字符串转int:n, _ := strconv.ParseInt("23", 16, 64)
  2. 字符串自动转换,默认int10进制:n2, _ := strconv.Atoi("123")