自学内容网 自学内容网

Golang学习笔记20240725,Go语言基础语法

第一个Go程序

package main

import "fmt"

func main() {
fmt.Println("hello world")
}

运行方式1:

go run main.go

运行方式2:

go build
.\hello_go.exe

在这里插入图片描述

运行方式3:goland右键运行
在这里插入图片描述

字符串拼接

使用加号可以对字符串进行拼接。

package main

import "fmt"

func main() {
fmt.Println("hello world" + "你好世界")
}

变量的声明和初始化

package main

import "fmt"

func main() {
var a, b, c int

a = 11
b = 22
c = 333

fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}

简短的声明

上面的变量定义和初始化有更简单的方式,如下:

package main

import "fmt"

func main() {
a := 11
b := 22
c := 333

fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}

格式化输出

使用%d可以在字符串中格式化输入整数类型,如下:

package main

import "fmt"

func main() {
a := 11
b := 22
c := 333

fmt.Printf("a=%d, b=%d, c=%d\n", a, b, c)
}

if语句

if语句主要有三种格式,如下:

package main

import "fmt"

func main() {
a := 33

// 单分支
if a > 0 {
fmt.Println(a)
}

// 双分支
if a < 0 {
fmt.Println(a)
} else {
fmt.Println(a + a)
}

// 多分支
if a > 100 {
fmt.Println(a)
} else if a > 0 {
fmt.Println(a + a)
} else {
fmt.Println(a + a + a)
}
}

for循环

累加求和:

package main

import "fmt"

func main() {
sum := 0
for i := 0; i < 101; i++ {
sum += i
}
fmt.Println(sum)
}

双重for循环打印九九乘法表

package main

import "fmt"

func main() {
for i := 1; i < 10; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d * %d = %d\t", j, i, i*j)
}
fmt.Println()
}
}

for遍历数组

package main

import "fmt"

func main() {
arr := []int{11, 22, 33}
for k, v := range arr {
fmt.Println(k, v)
}
}

for 遍历字符串

package main

import "fmt"

func main() {
arr := "abc"
for k, v := range arr {
fmt.Println(k, v)
}
}

for遍历字典

package main

import "fmt"

func main() {
arr := map[string]int{"one": 1, "two": 2, "three": 3}
for k, v := range arr {
fmt.Println(k, v)
}
}

for 遍历管道

package main

import "fmt"

func main() {
c := make(chan int)
go func() {
c <- 33
c <- 333
c <- 333333
close(c)
}()

for v := range c {
fmt.Println(v)
}
}

匿名变量

如果我们在遍历的时候,不想要key或者value,也可以用下划线替代,下划线叫做匿名变量。

package main

import "fmt"

func main() {
c := []int{1, 2, 3}

for _, v := range c {
fmt.Println(v)
}
}

switch 语句

go语言里面的switch语句每个case天生就是独立的,不需要加break。

package main

func main() {
s := "python"

switch s {
case "python":
print("1")
case "go":
print("2")
case "java":
print("3")
default:
print("4")
}
}

switch 可以一个分支捕获多个值

这个是go语言的特点,很少在其他语言看见,我们来看例子:

package main

func main() {
s := "python"

switch s {
case "python", "go", "java":
print("1")
default:
print("4")
}
}

switch的分支可以捕获条件判断

这个也是go语言的特点,我们来看例子:

package main

func main() {
s := 33

switch {
case s > 0 || s < 100:
print("1")
default:
print("4")
}
}

字符串可以通过索引访问字符

package main

func main() {
s := "abcde"
print(s[0])
}

字符串可以通过切片访问连续字符

package main

func main() {
s := "abcde"
print(s[0:3])
}

统计字符串的个数要用特殊的方法

package main

import "unicode/utf8"

func main() {
s := "abcde"
print(utf8.RuneCountInString(s))
}

将字符编码转换为字符

package main

func main() {
s := "abcde"
print(string(s[1]))
}

遍历字符串的每一个字符

package main

import "fmt"

func main() {
s := "我 爱 你 中 国"
cs := []rune(s)
for _, ch := range cs {
fmt.Println(string(ch))
}
}

使用buffer累加字符串

package main

import (
"bytes"
"fmt"
)

func main() {
var bf bytes.Buffer
for i := 0; i < 10; i++ {
fmt.Fprintf(&bf, "a%d ", i)
}
s := bf.String()
fmt.Println(s)
}

通过指针修改变量的值

指针可以直接对内存地址进行操作。使用*表示指针,使用&取地址。

package main

import "fmt"

func main() {
a := 33

pa := &a
*pa = 333

fmt.Println(a)
fmt.Println(*pa)
}

使用指针交换两个变量的值

package main

import "fmt"

func swap(a, b *int) {
*a, *b = *b, *a
}

func main() {
a, b := 33, 11
fmt.Println(a, b)

swap(&a, &b)
fmt.Println(a, b)
}

数组的基本使用

package main

import "fmt"

func main() {
// 声明
var arr [8]int

// 赋值
for i := 0; i < 8; i++ {
arr[i] = i * 33
}

// 遍历
for i := 0; i < 8; i++ {
fmt.Println(arr[i])
}
}

结构体的基本用法

package main

import "fmt"

type User struct {
Name string
Age  int
}

func main() {
zs := User{"zs", 20}
ls := User{Name: "ls", Age: 20}

fmt.Println(zs, ls)
}

结构体作为函数参数

package main

import "fmt"

type User struct {
Name string
Age  int
}

func printUser(u User) {
fmt.Printf("姓名:%s 年龄:%d \n", u.Name, u.Age)
}

func main() {
zs := User{"zs", 20}
ls := User{Name: "ls", Age: 20}

printUser(zs)
printUser(ls)
}

结构体指针作为函数参数

package main

import "fmt"

type User struct {
Name string
Age  int
}

func printUser(u *User) {
fmt.Printf("姓名:%s 年龄:%d \n", u.Name, u.Age)
}

func main() {
zs := User{"zs", 20}
ls := User{Name: "ls", Age: 20}

printUser(&zs)
printUser(&ls)
}

切片的增删改查

切片在go语言里面非常常用,因为其有动态扩展的特性。

package main

import "fmt"

func main() {
var arr []int

// 增加
arr = append(arr, 11)
arr = append(arr, 22)
arr = append(arr, 33)

// 删除 索引1
index := 1
arr = append(arr[:index], arr[index+1:]...)

// 修改
arr[0] = 888

// 遍历
for _, v := range arr {
fmt.Println(v)
}
}

map的增删改查

package main

import "fmt"

func main() {
var m = make(map[string]int)

// 增加
m["a"] = 11
m["b"] = 12
m["c"] = 13

// 删除
delete(m, "a")

// 修改
m["c"] = 888

// 遍历
for k, v := range m {
fmt.Println(k, v)
}
}

加法函数

package main

import "fmt"

func add(a, b int) int {
return a + b
}

func main() {
fmt.Println(add(1, 2))
}

函数的可变参数

package main

import "fmt"

func add(arr ...int) int {
sum := 0
for i := 0; i < len(arr); i++ {
sum += arr[i]
}
return sum
}

func main() {
fmt.Println(add(1, 2))
fmt.Println(add(1, 2, 3, 4, 5))
}

匿名函数

package main

import "fmt"

func main() {
defer func() {
fmt.Println("这个是匿名函数")
}()
fmt.Println("xxx")
}


原文地址:https://blog.csdn.net/qq_37703224/article/details/140684957

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!