这是我参与「第五届青训营 」伴学笔记创作活动的第1天
前期准备-安装go语言开发环境
常用的开发工具 VSCode和Goland,前者是开源,轻便,后者是功能丰富的付费软件(高校学生免费),新手推荐后者,安装方便。
安装环境 Go下载 - Go语言中文网 - Golang中文社区 (studygolang.com)
配备系统环境变量 GOROOT Path GOROOT:go环境文件地址 Path:下图或者%GOROOT%\bin
Go基础语法
第一个源程序:HellO World!
new--project -->new--go file main.go文件
package main //入口
import "fmt" //引入包
func main() {
fmt.Println("Hello World") //调用fmt包内函数
}
常用变量
var a = "initial" //go支持自动推断类型,等价于 a := "initial" 此较为常用
var b, c int = 1, 2 //分开赋值
var d = true
var e float64
f := float32(e) //便捷声明变量
const s string = "constant"//声明常量
const h = 500000000
const i = 3e20 / h
循环语句--唯一for
for {
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)
}
选择语句-- if if-else switch
if num := 9; num < 0 { //多段,不需要括号
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
switch {
case t.Hour() < 12: //功能更为强大,支持多支持多类型,分支内判断,不需要break跳出
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
数组、切片、映射
var a [5]int //创建int类型的数组
a[4] = 100
fmt.Println("get:", a[2])
fmt.Println("len:", len(a))
b := [5]int{1, 2, 3, 4, 5} //初始化赋值
s := make([]string, 3) //可变数组 Go语言独特语言特性
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]
m := make(map[string]int) //key-value 键值对
m["one"] = 1
m["two"] = 2
函数、指针、结构体
func exists(m map[string]string, k string) (v string, ok bool) {//这里是可以返回不同类型,多个值
v, ok = m[k]
return v, ok
}
func add2(n int) {
n += 2
}
func add2ptr(n *int) {
*n += 2
}
func main() {
n := 5
add2(n)
fmt.Println(n) // 5,彻底实参 并没有返回并修改结果
add2ptr(&n) // 引用符号,传回形参
fmt.Println(n) // 7
type user struct { //定义结构体
name string
password string
}
func main() {
a := user{name: "wang", password: "1024"}
b := user{"wang", "1024"}
c := user{name: "wang"}
c.password = "1024"
var d user
d.name = "wang"
d.password = "1024"//赋值
func (u user) checkPassword(password string) bool {
return u.password == password //判断密码是否正确
}
func main() {
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", -1)) // 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
b := "你好"
fmt.Println(len(b)) // 6
func main() {
s := "hello" //字符串定义
n := 123
p := point{1, 2}
fmt.Println(s, n) // hello 123
fmt.Println(p) // {1 2}
fmt.Printf("s=%v\n", s) // s=hello
fmt.Printf("n=%v\n", n) // n=123
fmt.Printf("p=%v\n", p) // p={1 2}
fmt.Printf("p=%+v\n", p) // p={x:1 y:2}
fmt.Printf("p=%#v\n", p) // p=main.point{x:1, y:2} 详情
f := 3.141592653
fmt.Println(f) // 3.141592653
fmt.Printf("%.2f\n", f) // 3.14
}
推荐网址
JSON转Golang Struct - 在线工具 - OKTools