Mac配置:http://t.zoukankan.com/zsy-p-6685889.html
https://wenku.baidu.com/view/8aeec92b15fc700abb68a98271fe910ef12daeaf.html?wkts=1673764660043&bdQuery=%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AEgo+pathmac
package mainimport ("fmt" // 引入输入输出包fmt
)func main() { //主要函数mainfmt.Println("HelloWorld")
}
使用以下命令运行该代码
go run \main.go
使用以下命令可以将该代码编译成二进制文件
go build \main.go
主要变量包括整形、字符型、布尔型和字符串,其中字符串为内置类型,两个字符串的拼接可以用+直接拼接,两个字符串的比较也可以直接实用等于号
定义变量的方法如下:
var a = 10086 //定义变量a,这种方法定义变量不需要指明类型
f := float32(e) // 定义变量f,这种定义方法可以知名类型
const h = 50000 // 定义常量,常量无固定类型,根据使用时确定类型,但是其二进制形式保持不变
使用案例如下:
package mainimport "fmt"func main() {var a = "init"var b, c int = 1, 2var d = truevar e float64f := float32(e)g := a + " foo"fmt.Println(a, b, c, d, e, f, g)
}
go语言的if中无括号,而后面必须加大括号
import "fmt"func main() {if 7%2 == 0 {fmt.Println("7 is even")} else {fmt.Println("7 is odd")}
}
switch语句
go使用switch语句一旦遇到了合适的case则会执行并跳出switch,不需要使用break跳出。并且go的switch语句可以不写switch条件,而直接在case中写条件。这可以用于替代多个if-else语句,并且拥有更高的性能。示例如下:
switch语句
func main() {a := 2switch a {case 1:fmt.Println("one")case 2:fmt.Println("two")}t := time.Now()switch {case t.Hour() < 12:fmt.Println("morning")case t.Hour() >= 12 && t.Hour() < 18:fmt.Println("afternoon")}
}
for语句
package mainimport "fmt"func main() {l := 1for {fmt.Println("loop")break}for j := 7; j < 9; j++ {fmt.Println(j)}for n := 0; n < 5; n++ {if n%2 == 0 {continue}fmt.Println(n)}for l <= 3 {fmt.Println(l)l++}
}
func main() {var a [5]inta[4] = 100fmt.Println(a[4], len(a))b := [5]int{1, 2, 3, 4, 5}fmt.Println(b)}
切片是可变长的数组,比定长数组使用得更频繁
func main() {s := make([]string, 3) // 使用make函数新建数组s[0] = "a"s[1] = "b"s[2] = "c"fmt.Println(s)s = append(s, "d") // 在切面后面追加元素s = append(s, "e", "f")fmt.Println(s)c := make([]string, len(s))copy(c, s) //复制切片操作// 切片的切片操作fmt.Println(c[3:])fmt.Println(c[:4])fmt.Println(c[1:3])
}
func main() {m := make(map[string]int) // 创建一个key为string,value为int的mapm["one"] = 1 // 添加操作m["two"] = 2fmt.Println(m)fmt.Println(m["one"]) // 查询操作delete(m, "one") //删除操作
}
对于slice或者map可以使用range快速遍历,使用起来更方便,示例如下
func main() {nums := []int{2, 3, 4}sum := 0for i, num := range nums {sum += numif i == 2 {fmt.Println("index", i, ",value", num)}}fmt.Println(sum)m := map[string]string{"a": "A", "b": "B"}for k, v := range m {fmt.Println(k, v)}
}
对切片的range会返回切片的下标和对应的值,而对于map的range则会返回其键值对。
函数中变量类型倒置,可以返回多个返回值,其结构如下:
func 函数名(形式参数) 返回值 {}
返回值有多个的时候使用()将其括起来
为结构体定义方法。带指针的结构体方法可以对结构体进行修改
可以将某个函数定义为某个结构体所属的函数,类似于Java中的成员类型,其格式如下
func (结构体变量名 结构体名)函数名(参数) (返回值类型){ }
如果传入的是结构体指针,则可以在函数内对结构体进行修改
type user struct {name stringpassword string
}
func (u user)checkPassword(password string)bool{return u.password == password
}
// 在函数内对原结构体进行修改,需要传入指针
func(*u user)resetPassword(password string){u.password = password
}
格式化输出
使用%v输出任意类型,%+v打印出字段名和值,%#v会打印出结构体和其中的值和字段名
JSON的序列化和反序列化
结构体中将所有字段名都首字母大写便可通过Marshal()函数进行序列化转化为JSON对象
0表示自动识别原字符串进制
上一篇:50个你离不开的 CLI 工具
下一篇:灭火器摆放识别检测算法 yolo