Go语言基础语法 | 豆包MarsCode AI刷题

38 阅读5分钟

1. Hello World

Go 语言结构非常简单,通常包括 package,导入的包以及 main 函数,在main函数里面写代码。

package main
import "fmt"
func main() {
    fmt.Println("Hello World!")
}

第二行导入了标准库里面的FMT包。这个包主要是用来往屏幕输入输出字符串、格式化字符串。import下面是main 函数, main 函数的话里面调用了fmt.Println输出HelloWorld 要运行这个程序的话,我们就直接go run main.go。如果我们想编译成二进制的话,可以在go buld 来编译。编译完成之后直接./main就可以运行。在FMT包里面还有很多的函数来做不同的输入输出格式化工作。大家可以在编辑器里面把鼠标悬浮在你的代码上,就可以看到每一个函数的文档。

2.数据类型

go语言是一门强类型语言,每一个变量都有它自己的变量类型。 常见的变量类型包含 字符串,整数,浮点型,布尔型等。 go语言的字符串是内置类型,可以直接通过加号拼接,也能够直接用等于号去比较两个字符串。 在go语言里面,大部分运算符的使用和优先级都和C或者C++类似,这里就不再概述。 go语言里面变量的声明有两种方式,一种是通过var name string = ""这种方式声明变量,另一种是使用变量 冒号 :=等于值

var x int
var y string
x = 10
y = "Hello"
var age int = 25
var pi float64 = 3.14159
var name string = "Alice"
var isActive bool = tru

3. 格 式 描 述

  • %v 按值的本来值输出
  • %+v 在 %v 基础上,对结构体字段名和值进行展开
  • %#v 输出 Go 语言语法格式的值
  • %T 输出 Go 语言语法格式的类型和值
  • %% 输出 % 本体
  • %t true或false
  • %b 整型以二进制方式显示(整数)或者是无小数部分,指数为二的幂的科学计数法(浮点数)
  • %o 整型以八进制方式显示
  • %d 整型以十进制方式显示
  • %x 整型以十六进制、字母小写方式显示或者字符串或切片显示,每字节两个字符
  • %X 整型以十六进制、字母大写方式显示或者字符串或切片显示,每字节两个字符
  • %c 相应Unicode码所表示的字符
  • %q 单引号围绕的字符字面值,由Go语言安全的转义(整数)或者是双引号围绕的字符串,由Go语言安全的转义(字符串)
  • %U Unicode 字符
  • %e 科学计数法
  • %E 科学计数法
  • %f 浮点数
  • %g 根据情况选择%e或%f产生更紧凑的无末尾0的输出
  • %G 根据情况选择%E或%f产生更紧凑的无末尾0的输出
  • %p 指针,十六进制方式显示
  • %s 字符串或切片显示
package main

import (
	"fmt"
)

type point struct {
	x, y int
}

func main() {
	p := point{1, 2}
	// {1 2}
	fmt.Printf("%v\n", p)
	// {x:1 y:2}
	fmt.Printf("%+v\n", p)
	// main.point{x:1, y:2}
	fmt.Printf("%#v\n", p)
	// main.point
	fmt.Printf("%T\n", p)
	// 100%
	fmt.Printf("%d%%\n", 100)
	// true
	fmt.Printf("%t\n", true)
	// 123
	fmt.Printf("%d\n", 123)
	// 1110
	fmt.Printf("%b\n", 14)
	// 7886928847432581p-49
	fmt.Printf("%b\n", 14.01)
	// 16
	fmt.Printf("%o\n", 14)
	// 14
	fmt.Printf("%d\n", 14)
	// e
	fmt.Printf("%x\n", 14)
	// E
	fmt.Printf("%X\n", 14)
	// 616263
	fmt.Printf("%x\n", "abc")
	// 616263
	fmt.Printf("%X\n", "abc")
	// c
	fmt.Printf("%c\n", 'c')
	// 'a'
	fmt.Printf("%q\n", 'a')
	// "abc"
	fmt.Printf("%q\n", "abc")
	// U+0061
	fmt.Printf("%U\n", 'a')
	// 1.234000e+08
	fmt.Printf("%e\n", 123400000.0)
	// 1.234000E+08
	fmt.Printf("%E\n", 123400000.0)
	// 78.900000
	fmt.Printf("%f\n", 78.9)
	// 78.9
	fmt.Printf("%g\n", 78.9)
	// 78.9
	fmt.Printf("%G\n", 78.9)
	// 0xc0000160b0
	fmt.Printf("%p\n", &p)
	// "abc"
	fmt.Printf("%s\n", "\"abc\"")
	// +的演示
	fmt.Printf("%+d\n", 10)
	fmt.Printf("%+d\n", -10)
	// '我'
	fmt.Printf("%q\n", '我')
	// "a我们b"
	fmt.Printf("%q\n", "a我们b")
	// '\u6211'
	fmt.Printf("%+q\n", '我')
	// "a\u6211\u4eecb"
	fmt.Printf("%+q\n", "a我们b")
	// -的演示
	// 默认右对齐
	// |    12|   345|
	fmt.Printf("|%6d|%6d|\n", 12, 345)
	// |  1.20|  3.45|
	fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)
	// 加-表示左对齐
	// |1.20  |3.45  |
	fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)
	// 默认右对齐
	//|   foo|     b|
	fmt.Printf("|%6s|%6s|\n", "foo", "b")
	// 加-表示左对齐
	// |foo   |b     |
	fmt.Printf("|%-6s|%-6s|\n", "foo", "b")
	// #的演示
	// 016
	fmt.Printf("%#o\n", 14)
	// 0xe
	fmt.Printf("%#x\n", 14)
	// c0000160b0
	fmt.Printf("%#p\n", &p)
}

4. 宽度和精度

宽度是%之后的值,如果没有指定,则使用该值的默认值,精度是跟在宽度之后的值,如果没有指定,也使用要打印的值的默认精度。%9.2f,宽度9,精度2

%fdefault width,default precision
%9fwidth 9,default precision
%.2fdefault width,precision 2
%9.2fwidth 9,precision 2
%9.fwidth 9,precision 0

5.数组和切片

数组是固定长度,可以通过[...]来定义长度 切片是动态数组,可以自动扩展

6.运算符

6.1算术运算符

运算符描述实例
+相加A + B 输出结果 30
-相减A - B 输出结果 -10
*相乘A * B 输出结果 200
/相除B / A 输出结果 2
%求余B % A 输出结果 0
++自增A++ 输出结果 11
--自减A-- 输出结果 9
其他运算符请看下节。

7. 并发

Go语言内有对并发的支持,常用的有Goroutines,Channels.

Goroutines

Goroutines是轻量级线程,通过go关键字启动

go func() {
    fmt.Println("This is running concurrently.")
}()

Channels

Channels是Go传递数据的管道

chaner := make(chan int)

go func() {
    chaner <- 42  // 发送数据到管道
}()

value := <-channer  // 从管道接收数据
fmt.Println(value)  // 输出: 42