【Go编程语言】 Go语言基础语法

news2025/1/17 3:01:09

Go语言基础语法


文章目录

  • Go语言基础语法
  • 一、注释
    • 1.单行注释
    • 2.多行注释
  • 二、变量
    • 1.变量的定义
    • 2.变量的初始化
    • 3.理解变量(内存地址)
    • 4.变量交换
    • 5.匿名变量
    • 6.变量的作用域
  • 三、常量
    • 1.常量的定义: const
    • 2.iota(特殊常量)
  • 四、基本数据类型
    • 1.布尔类型
    • 2.数值型
    • 3.字符串型
    • 4.数据类型的转换
  • 五、运算符
    • 1.算术运算符
    • 2.关系运算符
    • 3.逻辑运算符
    • 4.位运算符
    • 5.赋值运算符
    • 6.其他运算符
  • 六、键盘的输入和输出


在这里插入图片描述


一、注释

  • 我们在写代码的时候会有这种情况时长发生,刚写完的代码,觉得逻辑很清晰,自己怎么这么厉害,过一段时间再去看这个代码,就会产牛疑问,这个代码到底TM谁写的!所以为了防止自己看不懂自己的代码,或者你想把你写的代码给别人看,这个时候,我们就需要汗释了!

注释:你可以理解为写给人看的,机器并不会去执行这行语句。

  • 注释主要的功能就是为了增强代码的可读性,不参与程序的一切功能,Go语言的注释主要分成两类。

1.单行注释

package main
// 双斜杠表示单行注释,程序不会执行这行语句,这是写给自己或他人看的
import "fmt"

func main() {
	fmt.Printf("helloword!")
}

2.多行注释

package main
/*
	杠星 星杠表示多行注释,在二者之间的范围内可以换行写多行注释
*/
import "fmt"

/*
	这是一个main函数,这是go语言启动的入口
*/
func main() {
	// fmt.Printfln:打印一行内容,然后执行完成后进行换行
	fmt.Printfln("hello,word!")
}

养成写注释是一个良好的习惯,方便自己阅读,也方便他人阅读

二、变量

  • 在数学概念中,变量表示没有固定值且可改变的数。比如 x=1,x= 2;
  • 字面上的意思理解:变量就是会变化的量。
  • 比如我定一个了一个变量叫做名字,它在Go语言中是这样表示的:这个值既可以是张三,也可以是李四,也可以是王五,也可以是你的名字。那么在这里,这个name就是变量,可以变化的量。
// 这里的等于是赋值,就是把等号右边的值,赋值给左边变量的意思
var name string = "guan"

在这里除了name之外,我们还写了其他的东西,比如 var、string 这些都是干嘛的呢,接下来就来带大家了解下go 语言中的变量的定义以及go 语言的一些数据类型(比如上面的 name 名字,它就是一个字符串类型的,我们有时候还需要表示数字,所以还会存在数字类型等,后面进一步了解)。

1.变量的定义

  • Go语言是静态类型语言,就是所有的类型我们都需要明确的去定义。这里先不管其他类型,先了解string,用它来表示字符半。
  • 在Go语言中,我们声明一个变量一般足使用 var关键字:
var name type
  • 第一个 var 是声明变量的关键字,是固定的写法,声明一个变量,就需要一个var。
  • 第二个 name,就是变量的名字,你可以按照自己的需求给它定 个名字,用来后续使用。
  • 第二个 type,就是用来代表变量的类型。

举个栗子:

// 定义一个字符串变量,name
var name string
// 定义一个数字类型变量 age
var age int

如果之前学过Jva, C或者其他编程语言,第一次看到这样的操作肯人不舒服。Go语言和许多编程语言不同,它在声明变量时将变量的类型放在变量的名称之后,这样做的处就是可以避免像C语言那样合糊不清的声明形式,例如: int *a, b; 其中只有 a 是指针而b不是。如过想要这两个变量都是指针变量,则需要将分开书写。而在Go中,则可以和轻松地将们都声明为用钊类型:

var a,b *int

变量的命名规则遵循骆驼命名命法, 即首个单词小写,每个新单词的首字母大写,例如: helloWord 和 guanGuan。 .

变量定义的标准格式为

var 变量名 变量类型

变量声明以关键字 var 开头,后置变量类型,行尾无须分号。

我们有时候会批量定义变量,如果每次都单独定义比较麻烦,Go语言文持批量定义变量使用关键了 var 和括号,可以将一组变量定义放在一起。

	var (
		name string
		age  int
		addr string
	)

形式的声明语句往往是用于需要显式指定变量类型地方,或者因为变量稍后会被重新赋值而初始值大关紧要的地方。当一个变量被声明之后,如果没有显示的给他赋值,系统自动赋予它该类型的零值:

  • 整型和浮点型变量的默认值为 0 和 0.0
  • 字符串变量的默认值为空字符串。
  • 布尔类型变量默认值为 false。
  • 切片、函数、指针变量的默认为 null
fmt.Printf(name, age, addr)

2.变量的初始化

变量初始化的标准格式

var 变量名 类型 = 值(表达式)

比如,我想定义guan的一些信息,我可以这么表示

var name string = "guan"
var age int = 18

fmt.Printf("name:%s,age:%d", name, age)

这里的 name 和 age 就是变量名,name 的类型为 string, age 的类型为 int。他们的值分别为 guan 和 18

短变量声明并初始化

name := "guanGuan"
age :=18

fmt.Printf("name:%s,age:%d", name, age)

这是Go语言的推导声明写法,编译器会自动根据右值类型推断出左值的对应类型。它可以自动的推导出一些类型,但是使用也是有限制的;

  • 定义变量,同时显式初始化。
  • 不能提供数据类型。
  • 只能用在函数内部。不能随便到处定义

因为简洁和灵活的特点,简短变量声明被广泛用于大部分的局部变量的声明和初始化。

注意:由于使用了:=,而不是赋值的=,因此推导声明写法的左值变量必须是没有被定义过的变量。若定义过,将会发生编译错误。

// 定义变量 name
var name string
// 定义变量 name,并赋值为"guanGuan"
name := "guanGuan"

编译会报错,信息如下:no new variables on left side of :=意思是,在“:=”的左边没有新变量出现,意思就是“:=”的左边变量已经被声明了。

3.理解变量(内存地址)

	var num int
	num = 1000
	fmt.Printf("num的值:%d,内存地址:%p\n", num, &num)
	num = 2000
	fmt.Printf("num的值:%d,内存地址:%p\n", num, &num)

在这里插入图片描述

4.变量交换

package main

import "fmt"

func main() {
	/*
		在编程中,最简单的算法就是变量的交换,但是一般常见的方式就是定义中间变量
		var a int = 100
		var b int = 2oo
		var t int

		t = a
		a = b
		a = t

		fmt.Println(a,b)
	*/

	var a int = 100
	var b int = 200
	fmt.Printf("交换前的变量a=%d,b=%d\n", a, b)
	// 在Go语言中,可以直接用这样的方式实现值得交换,无需中间变量
	b, a = a, b
	fmt.Printf("交换后的变量a=%d,b=%d", a, b)

}

输出
在这里插入图片描述

5.匿名变量

匿名变量的特点是一个下画线””,““本身就是一个特殊的标识符,被称为空白标识符。它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其它变量进行赋值或运算。使用匿名变量时,只需要在变量声明的地方使用下画线替换即可。

例如:

package main

import "fmt"
/*
定义一个test函数,它会返回两个int类型的值,每次调用将会返叵 100 和 200 两个数值、这里我们先不只管 函数的定义,后面会讲解。89我们用这个函数来理解这个匿名变量。
*/
func test()(int, int) {
	return 100, 200
}
func main(){
	a,_:= test()
	_, b := test()
	fmt.Println(a, b) //输出的结果100,200
	// 在第一行代码巾,我们只需要获取第一个返叵值,所以第二个返回值定义为匿名交量
	// 在第二行代码巾,我们只需要获取第二个返叵值,所以第一个返回值定义为匿名变量
}
  • 在编译过程中,可能会遇到没有名称的变量、类型或方法。虽然这不是必须的,但有时候这样做可以极大地增强代巧的灵活性,这些变量被统称为匿名变量。
  • 匿名变量不占用内存空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用。

6.变量的作用域

一个变量(常量、类型或函数)在程序中都有一定的作用范围,称之为作用域。

了解变量的作用域对我们学习Go语言来说足比较重要的,因为Go语言会在编译时检查每个变量足否使用过,一旦出现未使用的变量,就会报编译错误。如果不能埋解变量的作用域,就有可能会带来一些不明所以的编译错误。

局部变量

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量都属于局部变量。

package main

import "fmt"

// 全局变量
var name string = "guanGuan"

func main() {
	//局部变量
	var age int = 18
	var name string = "Guan"

	fmt.Println(name, age)

}

func test() {
	fmt.Println(name)

}

全局变量

在函数休外声明的变量称之为全局变量,全局变量只需要在一个源文件中定义,就可以在所有源文件中使用,当然,不包含这个全局变量的源文件需要使用"import"关键它引入全局变量所在的源文件之后才能使用这个全局变量。

全局变量声明必须以var关键字开头,如果想要在外部包中使用全局变量的首字母必须大写。

//声明全局变量
var c int 
func main(){
	//声明局部变量
	var a,b int
	初始化参数
	a = 3
	b = 4
	c = a + b
	fmt.printf("a = %d,b = %d,c = %d\n",a,b,c) //a = 3, b = 4, c = 7
}

Go语言程序中全局变量与局部变量名称可以相同,但是函数体内的局部变量会被优先考虑。

package main
import "fmt"
//声明全局变量
var a float32 = 3.14
func main(){
	//声明局部变量
	var a int = 3
	fmt.Printf("a = %d\n", a) // a = 3
}

三、常量

1.常量的定义: const

常量是一个简单值的标识符,在程序运行时,不会被修改的量。

  • 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符申型
const identifier [type] = value

你可以省略类型说明符[type],因为编译器可以根据变量的值来推断其类型。

  • 显式类型定义: const b string = “abc”
  • 隐式类型定义: const b = “abc”

多个相同类型的声明可以简写为:

const c_name1, c_name2 = value1, value2

以下实例演示了常量的应用:

package main

func main() {
	// 常量不能被修改的量,否则会报错
	const URL string = "www.baidu.com"
	URL = "www.guan.com"
}

输出
在这里插入图片描述

package main

import "fmt"

func main() {
	const URL1 string = "www.baidu.com" // 显式定义
	const URL2 = "www.guan.com" // 隐式定义
	const a,b,c = 3.14,"guanGuan",true //同时定义多个常量
	fmt.Println(URL1)
	fmt.Println(URL2)
	fmt.Println(a,b,c)
}

输出
在这里插入图片描述

2.iota(特殊常量)

  • iota,特殊常量,可以认为是一个可以被编译器修改的常量。iota是go语言的常量认数器

  • iota在const关键字出现时将被重置为0(const内部的第一行之前), const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。

iota 可以被用作枚举值:

const (
a = iota
b = iota
c= iota
)

第一个iota等干0,每当iota在新的一行被使用时,它的值都会自动加 1;所以a=0, b=1,c=2可以简写人如下形式:

package main

import "fmt"

func main() {
	const (
		// 一组常量中,如果某个常量没有初始值,默认和上一行一致
		a = iota         //iota=0
		b                //iota=1
		c                //iota=2
		d = "hello,guan" // hello,guan  iota=3
		e                // hello,guan  iota=4
		f = 100          // 100 iota=5
		g                // 100 iota=6
		h = iota         //iota=7
		i                //iota=8
	)
	const (
		j = iota // iota=0
		k = iota // iota=1
	)
	fmt.Println(a, b, c, d, e, f, g, h, i, j, k)
}

四、基本数据类型

Go语言是一种静态类型的编程语言,在Go编程语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要川大数据的时候才需要申请大内存,就可以充分利川内存。编译器在讲行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么.
在这里插入图片描述

1.布尔类型

布尔型的值只可以是常量 true 或者 false。举一个简单的栗子:

package main

import "fmt"

func main() {
	// var 变量名 数据类型
	// bool: true false
	var isFlag bool
	var b1 bool = true
	var b2 bool = false

	fmt.Println(isFlag) //如果不进行初始赋值,则默认值为false
	fmt.Printf("%T,%t\n", b1, b1)
	fmt.Printf("%T,%t\n", b2, b2)
}

在这里插入图片描述

2.数值型

整型int和浮点型loat32、 foat64, Go语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。

Go 也有基于架构的类型,例如:uint 无符号、int 有符号

序号类型和描述
1uint8 无符号 8 位整型 (0到255)
2uint16 无符号 16 位整型 (0 到 65535)
3uint32 无符号 32 位型 (0 到 4294967295)
4uint64 无符号64位整型 (0到18446744073709551615)
5int8 力符号 8 位整型 (-128 到 127)
6int16 有符号 16位整型(-32768 到 32767)
7int32 有符号 32 位整型 (-2147483648 到 2147483647)
8int64 符号64位整型(-9223372036854775808到9223372036854775807)
package main

import "fmt"

func main() {
	// 定义一个整型
	// byte uint8
	// rune int32
	// int int64
	
	var age int = -100
	var i1 int8
	var i2 uint8
	i1 = 66
	i2 = 188

	fmt.Printf("%T,%d\n",age,age)
	fmt.Println(i1)
	fmt.Println(i2)
}

浮点型

序号类型和描述
1float32 IEEE-754 32位浮点型数
2float64 IEEE-754 64位浮点平数
3complex64 32 位实数和虚数
4complex128 64 位头数和虚数
package main

import "fmt"

func main() {
	var f1 float32
	f1 = 3.14
	var f2 float64
	f2 = 5.12
	// %f 默认保留小数点后6位,.2f%就是保留2位,.3f%就是保留3位
	fmt.Printf("%T,%.3f\n", f1, f1)
	fmt.Printf("%T,%f\n", f2, f2)
}

输出

在这里插入图片描述

1、关于浮点数在机器中存放形式的简单说明,浮点=符号位+指数位+尾数位

2、尾数位部分可能会丢失,造成精度损失。-123.0000901

package main

import "fmt"

func main() {
	// float64 尽量使用 float64 来定义浮点类型的小数
	var num1 float32 = -123.1234567
	var num2 float64 = -123.1234567
	fmt.Println("num1=", num1, "num2=", num2)

}
  • 说明:float64的精度要比float32的要准确
  • 说明:如果我们要保存一个精度高的数,则应该选择float64

3、浮点型的存储分为二部分:符号位+指数位+尾数位,在存储过程中,精度会有丢失、

4、golang的浮点型默认为float64类型

5、通常情况下,应该使用float64,因为它比float32更精确

以下列出了其他更多的数字类型:

序号类型和描述
1byte 类似 uint8
2rune 类似 int32
3uint 32 或 64 位
4int 与 uint 一样大小
5uintptr 无符号整型,用于存放一个指针

3.字符串型

import "fmt"

func main() {

	var str string
	str = "helloWorld!"
	fmt.Printf("%T,%s\n", str, str)

	//单引号 字符 ,整型-ASCII字符码
	
	x1 := 'A'
	x2 := "A"
	x3 := '关'
	
	// 拓展
	// 编码表 ASCII 字符码
	// 所有的中国字的编码表:GBK
	// 全世界的编码表:Unicode 编码表
	
	fmt.Printf("%T,%d\n", x1, x1)
	fmt.Printf("%T,%s\n", x2, x2)
	fmt.Printf("%T,%s\n", x3, x3)
}

在这里插入图片描述

package main

import "fmt"

func main() {

	var str1, str2, str3 string
	str1 = "hello"
	str2 = "guan"
	str3 = ","
	// 字符串的连接 用 + 号
	fmt.Println(str1 + str3 + str2)
	// 转义字符 \
	fmt.Println("hello\\guan")
	fmt.Println("hello\"guan")
	fmt.Println("hello\nguan") // \n 换行
	fmt.Println("hello\tguan") // \t 制表符
}

输出
在这里插入图片描述

4.数据类型的转换

在必要以及可行的情况下,一个类型的值可以被转换成另一种类型的值。由于Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明:

valueofTypeA = typeA (valueofTypeB)

类型 A 的值=类型 A(类型 B的值)

func main() {
	a := 5.0 //  float64
	b := 8   // int

	//需求:将int类型的 b 转化为 float64 类型
	c := float64(b)
	d := int(a)

	// 整型不能转换为bool类型
	//e := bool(b)

	//fmt.Printf("%T,%f\n", e, e)
	fmt.Printf("%T,%f\n", c, c)
	fmt.Printf("%T,%d\n", d, d)

}

输出
在这里插入图片描述
在这里插入图片描述

类型转换只能在定义正确的情况下转换成功,例如从一个取值范围较小的类型转换到一个取值范围较大的类型(将int16 转换为 int32).当从取值范围较大的类型转换到取伯范围较小的类型时(将int32转换为int16或将float32转换为int) ,会发生精度丢失(截断)的情况。

五、运算符

在这里插入图片描述

1.算术运算符

下表列出了所有Go语言的算术运算符。假定A值为1, B值为2。

运算符描述实例
+相加A+B 输出结果 3
-相减A-B 输出结果 -1
*相乘A*B 输出结果 2
/相除A/B 偷出结果 0
%求余A % B 输山结果 1
++自增A++ 输出结果2
自减A–输出结果 1
package main

import "fmt"

func main() {
	var a int = 1
	var b int = 2

	// + - * / % ++ --

	fmt.Println(a + b)
	fmt.Println(a - b)
	fmt.Println(a * b)
	fmt.Println(a / b)
	fmt.Println(a % b)
	a++
	fmt.Println(a)
	a--
	fmt.Println(a)

}

输出

在这里插入图片描述

2.关系运算符

下表列出了所有Go语言的关系运算符。假定A值为1, B值为2.

运算符描述实例
==检查两个值是否相等,如果相等返回True,否则返回 False(A == B) 为 False
!=检查两个值是否个相等,如果不相等返回True否则返回 False(A!=B)为True
>检查左边值是否大于右边值,如果是返回 True,否则返回 False(A > B) 为 False
<检查左边值是否小于右边值,如果是返回True,否则返回False(A < B) 为 True
>=检查左边值是否大于等于右边的值,如果是返回 True,否则返回 False(A > B) 为 False
<=检查左边值是否小于右边值,如果是返回True,否则返回False(A<=B)为 True
package main

import "fmt"

func main() {
	var a int = 1
	var b int = 2

	// ==等于  =赋值
	// 关系运算符 返回结果都是 bool值
	fmt.Println(a == b)
	fmt.Println(a != b)
	fmt.Println(a > b)
	fmt.Println(a < b)
	fmt.Println(a >= b)
	fmt.Println(a <= b)

}

输出结果
在这里插入图片描述

3.逻辑运算符

下表列出了所有Go语言的逻辑运算符。假设A值为True, B值为False。

运算符描述实例
&&逻辑 AND 运算符。如果两边的操作数都是 True,则条件 True,否则为 False(A && B) 为 False
||逻辑 OR 运算符。如果两边的操作数有一个 True,则条件 True,否则为 False。(A || B)为True
!逻辑 NOT 运算符。如果条件为 True,则逻辑 NOT 条件 False,否则为 True。!(A && B) 为True
package main

import "fmt"

func main() {
	var a bool = true
	var b bool = false

	// 逻辑与 && 要左右两边的表达式同时为真,才执行,结果才为真,否则为假
	// 关系运算符 返回结果都是 bool值
	fmt.Println(a && b)

	// 逻辑或 || 只要其中有一个为真,则为真,全为假则为假
	fmt.Println(a || b)
	
	// !为逻辑非,即取反,结果相反
	// a = true
	// b = false
	fmt.Println(!a) 
	fmt.Println(!b)

}

输出结果
在这里插入图片描述

4.位运算符

Go语言文持的位运算符如下表所示。倭定A为60, B为13:

运算符描述实例
&按位与运算符"&"是双目运算符。都足1结果为1,否则足0(A & B) 结果为 12,二进制为0000 1100
|按位或运算符"|"是双月运算符。都是0结果为0,否则是1(A|B)结果为 61,二进制为 0011 1101
^按位异或运算符"^"是双目运算符。不同则为1,机同为0(A^B)结果为49,二进制为 0011 0001
&^位清空,a&^b,对于b上的每个数值,如果为0,则取a对应位上的数值,如果为1,则取0(A &^ B) 结果为 48,二进制为 0011 0000
<<左移运算符"<<“是双目运算符。左移n位就是乘以2的n次方。其功能把”<<“左边的运算数的各二进位全部左移若干位,由”<<"右边的数指定移动的位数,高位丢弃,低位补0A<<2 结果为 240,二进制为 1111 0000
>>右移认算符">>“是双目运算符。右移n位就是除以2的n次方。其功能是把”>>“左边的运算数的各二进制文全部右移若干位,”>>"右边的数指定移动的位数A >> 2 结果为 15,二进制为0000 1111
package main

import "fmt"

func main() {
	// 二进制 0 1 逢二进一
	// 位运算:二进制上的 0 false 、 1 true
	// 逻辑运算符: && 只要有一个为假,则为假、 || 只要有一个为真,则为真
	// a 60 0011 1100
	// b 13 0000 1101
	// --------------------------
	// & 0000 1100 同时满足
	// | 0011 1101 一个满足就行
	// ^ 0011 0001 不同为1,相同为0
	// << 2
	// >> 2

	var a uint = 60
	var b uint = 13

	// 位运算
	var c uint = 0
	c = a & b                       //位运算
	fmt.Printf("%d,二进制%b", c, c) // 0000 1100
	fmt.Println()
	c = a | b                       //位运算
	fmt.Printf("%d,二进制%b", c, c) // 0011 1101
	fmt.Println()
	c = a ^ b                       //位运算
	fmt.Printf("%d,二进制%b", c, c) // 0011 0001
	fmt.Println()
	
	// 60 0011 1100
	c = a << 2
	fmt.Printf("%d,二进制%b", c, c) //
	fmt.Println()

	a = 60
	c = a >> 2
	fmt.Printf("%d,二进制%b", c, c) //
}

输出
在这里插入图片描述

5.赋值运算符

下表列出了所有Go语言的赋值认算符。

运算符描述实例
=简单的赋值运算符,将一个表达式的值赋给一个左值C=A+B将 A+B表达式结果赋值给C
+=相加后赋值B+=A等于B=B+A
-=相减后再赋值B-=A 等于 B=B-A
*=相乘后再赋值C*=A等于C=C*A
/=相除后由赋值C/=A等于C= C/A
%=求余后再赋值C%=A 等于 C= C % A
<<=左移后赋值C<<=2等于C=C<<2
>>=右移后赋值C>>=2等于C=C>>2
&=按位与后赋值C&=2 等于C=C&2
٨=按位异或后赋值C^=2 等于C=C^2
| =按位或后赋值C|=2等于 C = C|2
package main

import "fmt"

func main() {
	var a int = 21
	var c int
	//  将等号右边的值,赋值给左边
	c = a
	fmt.Printf("第 1 行  = 运算符实例,c 值为 = %d\n", c)
	c += a
	fmt.Printf("第 2 行  += 运算符实例,c 值为 = %d\n", c)
	c -= a
	fmt.Printf("第 3 行  -= 运算符实例,c 值为 = %d\n", c)
	c *= a
	fmt.Printf("第 4 行  *= 运算府实例,c 值为 = %d\n", c)
	c /= a
	fmt.Printf("第 5 行  /= 运算符实例,c 值为 = %d\n", c)
	c = 200
	c <<= 2
	fmt.Printf("第 6行  <<= 运算符实例,c值为 = %d\n", c)
	c >>= 2
	fmt.Printf("第 7 行 >>= 运算符实例,c 值为 = %d\n", c)
	c &= 2
	fmt.Printf("第 8 行  &= 运算符实例,c  值为 = %d\n", c)
	c ^= 2
	fmt.Printf("第 9 行  ^= 运算符实例,c 值为 = %d\n", c)
	c |= 2
	fmt.Printf("第 10 行 |= 运算符实例,c 值为 =%d\n", c)
}

输出
在这里插入图片描述

6.其他运算符

下表列出了Go语言的其他运算符

运算符描述实例
&返回变量存储地址&a;将给出变量的实际地址
*指针变量*a;是一个指针变量
package main

import "fmt"

func main() {
	var a int = 6
	var b int32
	var c float32
	var ptr *int

	/* 运算符实例 */
	fmt.Printf("第 1 行 a 变量类型为 = %T\n", a)
	fmt.Printf("第 2 行 b 变量类型为 = %T\n", b)
	fmt.Printf("第 3 行 c 变量类型为 = %T\n", c)

	/* & 和 * 运算符实例 */
	ptr = &a /* 'ptr' 包含了 'a' 变量的地址 */
	fmt.Printf("a 的值为 = %d\n", a)
	fmt.Printf("ptr 的值为 = %p\n", ptr)
	fmt.Printf("ptr 的值为 = %d\n", *ptr)

}

输出
在这里插入图片描述

六、键盘的输入和输出

package main

import "fmt"

func main() {
	var name string
	var phoneNumber string

	// 定义了两个变量,想用键盘来输入这两个变量
	//fmt.Println()  //打印并换行
	//fmt.Printf()  //格式化输出
	//fmt.Print()  //打印输出

	fmt.Println("请输入姓名和手机号码:")

	// 变量去地址 &变量
	// 指针、地址来修改和操作变量
	// Scanln 阻塞等待从键盘输入
	fmt.Scanln(&name, &phoneNumber)
	fmt.Println("name:", name)
	fmt.Println("phoneNumber:", phoneNumber)
	// fmt.Scanln() //接收输入并换行
	// fmt.Scanf()  // 接收输入,格式化输入
	// fmt.Scan()   // 接收输入

}

输出
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/501102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HLS直播与延迟时长的来源与超低延迟直播

1.HLS直播延迟时长&#xff08;HTTP Live Streaming&#xff09; HTTP Live Streaming&#xff08;简称 HLS&#xff09;是一个基于 HTTP 的视频流协议&#xff0c;由 Apple 公司实现&#xff0c;Mac OS 上的 QuickTime、Safari 以及 iOS 上的 Safari 都能很好的支持 HLS&…

Kmeans++ 算法对随机数据样本聚类

一、算法简介 K-means算法是一种常见的无监督学习聚类算法&#xff0c;其基本思想是将n个样本划分为k个簇&#xff0c;每个簇内的样本之间的相似度要尽可能的大&#xff0c;而不同簇之间的相似度要尽可能的小&#xff0c;通过最小化各个簇内点与该簇中心点的距离和来实现。 二…

API接口对程序员的帮助有哪些,参考值简要说明

API接口对程序员的帮助有哪些 提高开发效率&#xff1a;通过API接口&#xff0c;程序员能够在不用重复编写代码的情况下&#xff0c;直接获取其他应用程序提供的服务或数据&#xff0c;极大地提高了开发效率。 减少错误率&#xff1a;使用API接口可以避免手动输入数据容易出现…

(LDR6020)双USBType-C口快充头适配器方案(PD快充 支持功率动态分配,只需要一颗芯片完成所需功能)

6月7日&#xff0c;欧盟公布了“在欧盟境内统一使用USB Type-C接口用于移动设备充电”的法规。在同一天&#xff0c;苹果公司发布了自己的35W双USB Type-C口充电器。可以看到&#xff0c;多USB Type-C口&#xff08;下文简称:C口&#xff09;快充充电器将成为市场趋势。LDR6020…

thinkphp+vue+html高校固定资产管理系统维修 租借4h80u

本高校资产管理系统采用的数据库是Mysql&#xff0c;使用thinkphp框架开发。在设计过程中&#xff0c;充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。运行环境:phpstudy/wamp/xammp等 开发语言&#xff1a;php 后端框…

经验总结:(Nginx 快速入门)

为什么需要Nginx 一个普通web项目刚刚上线不久时,用户使用的少,并发度低,所以在一个服务器上用一个jar包启动应用就可以了,然后内部Tomcat返回内容给用户。但是慢慢的,用户量上来了,并发量逐渐增大,这时候一台服务器就满足不了我们的需求了。于是采用横向扩展,即增加服务器的数…

MySQL调优系列(三)——存储引擎的选择

一、什么是存储引擎 关系型数据库的数据是存在表里的&#xff0c;可以将表理解为由行和列组成的表格&#xff0c;类似于Excel的电子表格的形式&#xff0c;每个表格就是一个数据。 表是在存储数据的同时&#xff0c;还要组织数据的存储结构&#xff0c;而这些数据的组织结构就…

tomcat启动web项目报错汇总

tomcat启动web项目报错汇总 前言问题java: 找不到符号 符号: 方法 getType() 位置: 类型为com.mtwl.vehicle.carflow.p背景解决方案 java: -source 7 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)背景问题解决 前言 简单记录一下tomcat部署web项…

【刷题记录】关于二叉树的OJ题

文章目录 1.根据二叉树创建字符串2.二叉树的层序遍历3.二叉树的最近公共祖先4.二叉搜索树与双向链表5. 从前序与中序遍历序列构造二叉树6.二叉树的遍历 1.根据二叉树创建字符串 题目链接&#xff1a;606. 根据二叉树创建字符串 - 力扣&#xff08;LeetCode&#xff09; 题干&…

DS200TCQCG1BKG什么是控制模式,控制模式如何分类?

​ DS200TCQCG1BKG.什么是控制模式&#xff0c;控制模式如何分类&#xff1f; 控制回路的功能是在受控变量偏离该值时将其恢复到其设定值&#xff0c;从而将过程保持在所需条件下。实现这一点的动作称为控制模式。 控制方式分为两类 连续模式包括比例、积分和微分模式。 什么…

企业短信遭疯狂盗用,可能是没配置验证码

手机短信作为一种快捷的通讯方式被广泛应用。不仅在个人日常生活中&#xff0c;企业也习惯使用手机短信来进行验证和提醒&#xff0c;以保证业务的正常进行。随着数字化的发展&#xff0c;手机短信也成为了不法分子滥用的目标之一&#xff0c;给个人和企业带来不同经济损失。 个…

百度AI,和“吴文俊奖”同行的十二年、千丈山、万里路

今天&#xff0c;AI正作为一个科技发展周期的轴心&#xff0c;成为万众瞩目的焦点。与历史上数次技术革命和AI浪潮所不同的是&#xff0c;这次AI的全球领先阵营里&#xff0c;有了中国的身影。 从一个学术灵感&#xff0c;到一项全球领先的专利技术&#xff0c;从一篇顶会论文到…

MySQL基础(十)创建和管理表

1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步。只有正确地把数据存储起来&#xff0c;我们才能进行有效的处理和分析。否则&#xff0c;只能是一团乱麻&#xff0c;无从下手。 那么&#xff0c;怎样才能把用户各种经营相关的、纷繁复杂的数据&#xff0c…

关于如何对VS的C++项目进行完全重命名

很多人一个开始在VS编写C项目的时候&#xff0c;第一个项目名称都是系统默认名称或者HelloWorld这类的名字&#xff0c;一看就比较小白。 一段时间以后&#xff0c;项目已经进行了一段时间了&#xff0c;这时候想要对项目名称进行重命名。但是&#xff0c;偏偏VS的重命名功能做…

【homeassistant中ESPHome无法正常添加新设备指导操作】

【homeassistant中ESPHome无法正常添加新设备指导操作】 1. 在ESPHome添加设备1.1 问题显示1.2 添加NEW DEVICE1.3 烧录初始化固件2. 编辑主板的代码并录入3. 进行设备编译4. 编译完成后尝试亮灯5. ip地址的设置1. 在ESPHome添加设备 1.1 问题显示 点击添加设备,然后continu…

【网络】传输层协议-UDP协议

文章目录 传输层TCP/UDP预备知识:端口号的理解端口号的范围 关于端口号的相关问题netstat命令pidof命令 UDP协议所处的位置UDP协议格式UDP的特点UDP的缓冲区基于UDP的应用层协议 传输层TCP/UDP 回忆数据发送到网络的过程 之前在学习HTTP等应用层协议时为了方便理解:我们简单的认…

液晶显示控制驱动器HD61202介绍

液晶显示控制驱动器HD61202的特点 HD61202液晶显示控制驱动器是一种带有驱动输出的图形液晶显示控制器&#xff0c;它可直接与8位微处理器相连&#xff0c;它可与HD61203配合对液晶屏进行行、列驱动。HD61202是一种带有列驱动输出的液晶显示控制器&#xff0c;它可与行驱动器HD…

Docker 进阶实战:数据管理、网络

文章目录 Docker 进阶实战&#xff1a;数据管理、网络数据管理Volume创建数据卷挂载数据卷共享数据卷删除数据卷 Bind mountstmpfs mounts 网络端口映射容器互联Docker 内部网络Docker linkDocker Networking Docker 进阶实战&#xff1a;数据管理、网络 数据管理 默认情况下…

基于simulink使用麦克风阵列的声波束成形

一、前言 此示例演示如何对麦克风阵列接收到的信号进行波束化&#xff0c;以在嘈杂环境中提取所需的语音信号。 二、模型的结构 该模型模拟在 10 元件均匀线性麦克风阵列 &#xff08;ULA&#xff09; 上接收来自不同方向的三个音频信号。在接收器处添加热噪声后&#xff0c;应…

如何利用 Playwright 对已打开的浏览器进行爬虫!

大家好&#xff0c;我是安果&#xff01; 之前写过一篇关于如何利用 Selenium 操作已经打开的浏览器进行爬虫的文章 如何利用 Selenium 对已打开的浏览器进行爬虫&#xff01; 最近发现很多人都开始摒弃 Selenium&#xff0c;全面拥抱 Playwright 了&#xff0c;那如何利用 Pla…