Go语言初识--基础篇| 青训营笔记

61 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第1天

前期准备-安装go语言开发环境

常用的开发工具 VSCode和Goland,前者是开源,轻便,后者是功能丰富的付费软件(高校学生免费),新手推荐后者,安装方便。

安装环境 Go下载 - Go语言中文网 - Golang中文社区 (studygolang.com)

image.png

配备系统环境变量 GOROOT Path GOROOT:go环境文件地址 Path:下图或者%GOROOT%\bin

image.png

image.png

Go基础语法

第一个源程序:HellO World!

new--project -->new--go file main.go文件

image.png

package main //入口

import "fmt" //引入包

func main() {
   fmt.Println("Hello World") //调用fmt包内函数
}

image.png

常用变量

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

Convert curl commands to code (curlconverter.com)

前言 · Go语言圣经 (studygolang.com)