2.go基础语法

一、环境安装

windows 下载安装版本就可以了,例如:

go1.20.2.windows-386.msi

安装好后,环境变量自动会设置好,全局可以使用go命令

C:\Users\pangbb>go version
go version go1.20.2 windows/386

配置goproxy,配置好goproxy 在vscode中安装go的扩展插件

go env -w GOPROXY=https://goproxy.cn,direct

输出一个hello world

package main
import "fmt"

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

二、变量

1.变量声明

var name string

2.先声明在赋值

package main
import "fmt"

func main(){
	var name string
	name = "zhangsan"
	fmt.Println("name的值为:" + name)
}

3.变量声明并赋值

package main
import "fmt"

func main(){
	var name string = "zhangsan"
	fmt.Println("name的值为:" + name)
}

省略var 和 “数据类型关键字” 的写法. string这个数据类型可以省略, var的关键字用 :代替

package main
import "fmt"

func main(){
	name := "zhangsan"
	fmt.Println("name的值为:" + name)
}

4.声明多个相同类型变量

package main
import "fmt"

func main(){
	var name,gender string
	name = "zhangsan"
	gender = "boy"
	fmt.Println("name的值为:" + name,"gender的值为:" + gender)
}

5.声明多个不同类型变量

package main
import "fmt"

func main(){
	var(
		name string
		age int
		ismarrid bool
	)
	fmt.Println(name,age,ismarrid)
}


结果如下:
E:\code\project\后端项目\go_project\hello>go run main.go
 0 false

//这里可以看到 三个不同类型的变量是有默认值的

声明并赋值:

package main
import "fmt"

func main(){
	var(
		name string
		age int
		ismarrid bool
	)
	name = "zhangsan"
	age = 20 
	ismarrid = true
	fmt.Println(name,age,ismarrid)
}

6.简便写法

package main
import "fmt"

func main(){
	name,age,ismarrid := "zhangsan",20,true
	fmt.Println(name,age,ismarrid)
}

7.注意

:= 的用法仅限于在函数内使用

8.匿名变量

匿名变量只能用来接受值,不能打印,和占位符作用差不多

匿名变量使用 _ 来表示

实例:

a,_  := "zhangsan","lisi"

9.语句分隔符

在go中 是使用 ; 和 换行 来区分不同的语句。也就是说;的使用场景只有这种场景

var a  = 1;var b = 2;

三、数据类型

主要数据类型是:

1.整形

类型取值范围
uint8: 无符号8位整数0-255
uint16:无符号16位整数0-65535
uint32:无符号32位整数
uint64:无符号64位整数
int8: 有符号8位整数-128 - 127
int16: 有符号16位整数-32768 - 32767
int32: 有符号32位整数
int64: 有符号64位整数

2.浮点型

float32 和float64

3.布尔型

true 和 flase

4.字符串儿

4.1 索引

索引的开始也是从0开始的,注意的是 在go中打印单个字符的时候不会直接显示字符,而是显示字符对应额ASIC码,所以需要转义一下。

package main
import "fmt"

func main(){
	s := "hello world"
	fmt.Println(string(s[0]))
}

4.2 切片

切换和python的一样切片一样,但是不支持负数。

package main
import "fmt"

func main(){
	s := "hello world"
	fmt.Println(s[2:])
	fmt.Println(s[2:6])
	fmt.Println(s[:6])
}

结果如下:

E:\code\project\后端项目\go_project\hello>go run main.go
llo world
llo
hello

4.3 字符串拼接

package main
import "fmt"

func main(){
	name := "zhangsan"
	age := " 200"
	fmt.Print(name + age)
}

4.4 转大写字符

package main

import (
	"fmt"
	"strings"
)

func main() {
	name := "zhangsan"
	newname := strings.ToUpper(name)
	fmt.Print(newname)
}

4.5 判断某字符开头

func main() {
	var name string = "zhangsan"
	fmt.Print(strings.HasPrefix(name, "li"))
}
结果如下:
E:\code\project\后端项目\go_project\hello>go run main.go
false

4.6 判断某字符结尾

import (
	"fmt"
	"strings"
)

func main() {
	var name string = "zhangsan"
	fmt.Print(strings.HasSuffix(name, "san"))
}

4.7 检索字符串

func main() {
	name := "zhangsan  lisi wangwu"
	fmt.Print(strings.Contains(name, "zhang"))
}

结果如下:
E:\code\project\后端项目\go_project\hello>go run main.go
true

4.8 去空格

strings.TrimSpace 只能去除字符串前后的空格

package main

import (
	"fmt"
	"strings"
)

func main() {
	var name string = "   zhang san   "
	fmt.Print(strings.TrimSpace(name))
	fmt.Println("lisi")
}

结果如下:
E:\code\project\后端项目\go_project\hello>go run main.go
zhang sanlisi

4.9 索引

import (
	"fmt"
	"strings"
)

func main() {
	name := "zhangsan  lisi wangwu"
	newname := strings.Index(name, "hangsan")
	fmt.Println(newname)
}

4.10 分割

import (
	"fmt"
	"strings"
)

func main() {
	name := "zhangsan lisi wangwu"
	newname := strings.Split(name, " ")
	fmt.Println(newname)
}

结果如下:
E:\code\project\后端项目\go_project\hello>go run main.go
[zhangsan lisi wangwu]

4.11 拼接

package main

import (
	"fmt"
	"strings"
)

func main() {
	name := "zhangsan lisi wangwu"
	newname := strings.Split(name, " ")
	newname1 := strings.Join(newname, ",")
	fmt.Println(newname1)
}

结果如下:
E:\code\project\后端项目\go_project\hello>go run main.go
zhangsan,lisi,wangwu

5.数据类型转换

5.1 字符串转数字

package main

import (
	"fmt"
	"reflect"
	"strconv"
)

func main() {
	ageStr := "10"
	age, _ := strconv.Atoi(ageStr)
	fmt.Println(age, reflect.TypeOf(age))
}


结果如下:
E:\code\project\后端项目\go_project\hello>go run main.go
10 int

5.2 数字转字符串

package main

import (
	"fmt"
	"reflect"
	"strconv"
)

func main() {
	age := 10
	newage := strconv.Itoa(age)
	fmt.Println(newage, reflect.TypeOf(newage))
}

6.值拷贝

6.1 python

首先在python中,变量在传递值的时候,是传递的地址.a和b变量指向的是同一地址

a = 10
b = a
print("a address is {}".format(id(a)))
print("b address is {}".format(id(b)))
print("-"*100)
a = 20
print("a address is {}".format(id(a)))
print("b address is {}".format(id(b))

结果如下:


[root@node1 ~]# python a.py 
a address is 7090304
b address is 7090304
----------------------------------------------------------------------------------------------------
a address is 7090064
b address is 7090304

6.2 go

在go中不是这样的,在变量传递的时候,是直接传递的值,b是直接开辟了一块新空间

a := 100
b := a
fmt.Println("a的地址是:", &a)
fmt.Println("b的地址是:", &b)
a = 200
fmt.Println("a的地址是:", &a)
fmt.Println("b的地址是:", &b)

结果如下:

a的地址是: 0xc00000c098
b的地址是: 0xc00000c0b0
a的地址是: 0xc00000c098
b的地址是: 0xc00000c0b0

四、判断和循环

1.if语句

注意点:
判断条件可以不加(),一般编辑器一保存也会帮你()去掉
if和else关键字后边的{ 必须和if和else在同义行,不能换行

package main

import "fmt"

func main() {
	var username = "root"
	var passworwd = "123"
	if username == "root1" && passworwd == "123" {
		fmt.Println("登陆成功")
	} else {
		fmt.Print("登陆失败")
	}
}

2.if多分支语句

package main

import (
	"fmt"
)

func main() {
	var a string
	fmt.Println("请输入一种颜色:")
	fmt.Scan(&a)
	if a == "red" {
		fmt.Println("这是爱情的颜色")
	} else if a == "pink" {
		fmt.Println("这是年轻的颜色")
	} else {
		fmt.Println("这个颜色可不怎么样")
	}
}

3.for循环

3.1.死循环

func main() {
	var num = 0
	for {
		num++
		fmt.Println(num)
	}
}

3.2 判断循环

func main() {
	var num = 0
	for num < 10 {
		fmt.Println(num)
		num++
	}
}

3.3 类C写法

for i := 0; i <= 10; i++ {
		fmt.Println(i)
}

五、指针

1.定义指针变量

var num = 100
var p *int
p = &num
fmt.Println(p)

2.打印指针变量的值

fmt.Println(*p)

3.通过指针修改变量的值

	var num = 100
	var p *int
	p = &num
	fmt.Println(num)
	fmt.Println("-------------------------")
	*p = 200
	fmt.Println(num)

结果如下:

100
-------------------------
200

六、数组和切片

1.定义数组并且赋值数组

数组定义好后,是不能追加元素的

#一开始就定义了数组的长度为3,只能放3个元素
var name = [3]string{"zhangsan", "lisi", "wangwu"}

#在初始化的时候,不限定数组内存放几个元素,但是一但存放了元素,就固定下来了
var num = [...]int{10, 11, 12, 13, 14, 15}
fmt.Println(name)
fmt.Println(num)

查看数组显示的类型

fmt.Println(reflect.TypeOf(name))
fmt.Println(reflect.TypeOf(num))

结果如下:
[3]string
[6]int

2.切片

切片是对数组的一个连续片段的引用,切片不会对数组进行复制操作。
切片是引用类型数据,必须要初始化才能使用,否则会报索引越界的错

切片的定义有两种:

2.1 切片的定义

1.直接定义切片

var num = []int{0, 1, 2, 3, 4, 5}
fmt.Println(reflect.TypeOf(num))

结果是:
[]int

2.对数组进行切片操作 得到切片对象

var num = [...]int{10, 11, 12, 13, 14, 15}
var num1 = num[0:4]
fmt.Println(num1)
fmt.Println(reflect.TypeOf(num1))

结果如下:

[10 11 12 13]
[]int

在类型显示上 切片的类型是[]里不显示数组中的元素个数

2.2 通过切片修改数组

var num = [...]int{10, 11, 12, 13, 14, 15}
var num1 = num[0:4]
fmt.Println(num)
fmt.Println(num1)
fmt.Println("---------------------------")
num1[0] = 100
fmt.Println(num)
fmt.Println(num1)

结果如下:

[10 11 12 13 14 15]
[10 11 12 13]
---------------------------
[100 11 12 13 14 15]
[100 11 12 13]

2.3 快速将数组进行全部切片

var num = [...]int{10, 11, 12, 13, 14, 15}

#省略切片的开始和结尾,就对数组进行切片,内容和数组一致
var num1 = num[:]
fmt.Println(num, reflect.TypeOf(num))
fmt.Println(num1, reflect.TypeOf(num1))

结果如下:
[10 11 12 13 14 15] [6]int
[10 11 12 13 14 15] []int

3.切片的长度和容量

3.1.切片的长度就是切片中有几个元素
3.2.切片的容量是"数组"的长度 减去 切片的开始位置: len(数组) - 切片开始的索引

实例验证:

var num = [...]int{10, 11, 12, 13, 14, 15}
var a1 = num[0:1] 
var a2 = num[0:2] 
var a3 = num[1:2] 
var a4 = num[2:3] 
fmt.Println(a1, len(a1), cap(a1))
fmt.Println(a2, len(a2), cap(a2))
fmt.Println(a3, len(a3), cap(a3))
fmt.Println(a4, len(a4), cap(a4))


结果如下:
[10] 1 6
[10 11] 2 6
[11] 1 5
[12] 1 4

4.切片的追加

4.1 切片的追加不会对数组造成影响

var num = [...]int{10, 11, 12, 13, 14, 15}
var a = num[:]
a = append(a, 20)
a = append(a, 21)
fmt.Println(num)
fmt.Println(a)

结果如下:
[10 11 12 13 14 15]
[10 11 12 13 14 15 20 21]

4.2定义切片 在追加

num := []int{}
fmt.Println(num)
num = append(num, 10)
num = append(num, 20)
num = append(num, 30)
fmt.Println(num)


结果如下:
[]
[10 20 30]

5.vscode使用append小技巧

给哪个切片朱家元素、只要使用

切片名.append      会自动生成       切片名 = append(切片名,要追加的值) 的表达式

6.切片追加另外一个切片

使用 “切片名…” 解构

var num = []int{0, 1, 2, 3, 4, 5}
var num1 = []int{10, 11, 12, 13}
num = append(num, num1...)
fmt.Println(num)

7.切片和数组的遍历

var num = []int{10, 11, 12, 13, 14, 15}
for i, v := range num {
	fmt.Println(i, v)
}

七、map

1.定义

map就是python的字典
解释:
第一个string: key的类型
第二个string: value的类型

var list = map[string]string{"name": "zhangsan", "age": "20"}
fmt.Println(list)

2.修改map值

修改值和插入语法一致

var list = map[string]string{"name": "zhangsan", "age": "20"}
fmt.Println(list)
list["name"] = "lisi"
fmt.Println(list)

3.遍历map

var list = map[string]string{"name": "zhangsan", "age": "20"}
	for _, v := range list {
		// fmt.Println(i, v)
		fmt.Println(v)
	}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 基础(十):元组

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、声明元组二、访问元组三、修改元组变量四、遍历元组五、切片六、常用函数和方法6.…

MySQL_第13章_约束

第13章_约束 1. 约束(constraint)概述 1.1 为什么需要约束 数据完整性&#xff08;Data Integrity&#xff09;是指数据的精确性&#xff08;Accuracy&#xff09;和可靠性&#xff08;Reliability&#xff09;。它是防止数据库中存在不符合语义规定的数据和防止因错误信息…

【设计模式】深入浅出--外观模式

文章目录 前言一、外观模式介绍二、案例场景三、外观模式优缺点四、外观模式应用场景总结 前言 不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别&#xff0c;如果是自己泡茶需要自行准备茶叶、茶具和开水&#xff0c;而去茶馆喝茶&#xff0c;最简单的方式就是跟茶馆服务员…

【UE】暂停游戏界面及功能实现

效果 步骤 1. 首先在项目设置中添加一个暂停的操作映射 2. 新建一个控件蓝图&#xff0c;命名为“PauseMenuWidget” 3. 打开“ThirdPersonCharacter”&#xff0c;添加一个布尔类型变量&#xff0c;命名为“isScreenShow”&#xff0c;用于判断当前玩家是否打开了暂停界面 在…

S7-200 SMART 和 S7-1200PLC进行PROFINET IO通信

从 S7-200 SMART V2.5 版本开始,S7-200 SMART 开始支持做 PROFINET IO 通信的智能设备。因此,两个 S7-200 SMART 之间可以进行 PROFINET IO 通信,一个CPU 作PROFINET IO 控制器,一个 CPU 作 PROFINET 通信的设备。组态的时候有两种方法,一种是通过硬件目录组态另外一种是通…

原理+配置+实战,Canal一套带走

前几天在网上冲浪的时候发现了一个比较成熟的开源中间件——Canal。在了解了它的工作原理和使用场景后&#xff0c;顿时产生了浓厚的兴趣。今天&#xff0c;就让我们跟随阿Q的脚步&#xff0c;一起来揭开它神秘的面纱吧。 简介 canal 翻译为管道&#xff0c;主要用途是基于 M…

EEG源定位

导读 自从脑电图(EEG)被发现以来&#xff0c;人们希望EEG能提供一个了解大脑的窗口&#xff0c;研究人员一直试图用EEG无创定位大脑中产生头皮电位的神经元活动。20世纪50年代的早期探索使用电场理论从头皮电位分布推断大脑中电流偶极子的位置和方向&#xff0c;引发了大量定量…

2023美赛春季赛Z题模型代码

已经完成模型代码&#xff0c;仅供大家参考&#xff0c;需要更多请看文末 一、问题分析 首先需要收集与奥运会举办城市/国家相关的历史数据。这需要涉及诸如经济、土地利用、人类满意度&#xff08;包括运动员和观众&#xff09;、旅行、基础设施建设、环境影响等多个方面。数…

日常项目技术方案脉络

开篇引砖 软件在其生命周期中&#xff0c;当其进入稳定期后&#xff0c;大部分时间都处于迭代更新维护阶段。在这漫长的三年甚至五年的存活期内&#xff0c;我们需要面对林林种种大大小小的需求。今天我们就聊聊在这段期间&#xff0c;如何快速产出一份合格的技术方案。 方案给…

Banana Pi BPI-Centi-S3 使用MicroPython编程显示JPG图片

BPI-Centi-S3是我们新推出的一款板载1.9英寸彩屏的小尺寸ESP32-S3开发板&#xff01; BPI-Centi-S3 banana-pi wiki BPI-Centi-S3 bpi-steam wiki 1 关键特性 ESP32-S3&#xff0c;Xtensa 32 bit LX72M PSRAM , 8M FLASH2.4G WIFI &#xff0c;Bluetooth 5 &#xff0c;Blue…

基于鲸鱼算法的极限学习机(ELM)回归预测-附代码

基于鲸鱼算法的极限学习机(ELM)回归预测 文章目录 基于鲸鱼算法的极限学习机(ELM)回归预测1.极限学习机原理概述2.ELM学习算法3.回归问题数据处理4.基于鲸鱼算法优化的ELM5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;本文利用鲸鱼算法对极限学习机进行优化&#xff0c;并…

微服务学习之面试知识相关总结(Nacos、MQ)

文章目录 壹 微服务Nacos1.1 SpringCloud常见组件1.2 Nacos的服务注册表结构1.3 Nacos如何支撑内部数十万服务注册压力1.4 Nacos避免并发读写冲突问1.5 Nacos与Eureka的区别1.6 Sentinel的限流与Gateway的限流的差别1.7 Sentinel的线程隔离与Hystix的线程隔离的差别 贰 MQ知识2…

7款神仙级非常漂亮的 Linux 操作系统UI,你都用过吗

Linux 的发行版有很多&#xff0c;这里罗列7个漂亮的 Linux 发行版&#xff0c;可以说是Linux操作系统界的颜值担当了。 1、elementary OS 网站&#xff1a;https://elementaryos.cn elementary OS操作系统是最漂亮的Linux发行版之一。它基于macOS外观&#xff0c;同时为Linu…

C# 特性(Attribute)

一、特性&#xff08;Attribute&#xff09;定义 特性&#xff08;Attribute&#xff09;是用于在运行时传递程序中各种元素&#xff08;比如类、方法、结构、枚举、组件等&#xff09;的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。 特性使用中括号…

AI智能课程第一讲:chatgpt介绍

AI应用现状 用AI艺术创作 一个小女孩打折手电筒在侏罗世纪公园找恐龙。 AI用于医疗行业 AI辅助驾驶 AI广告投放上的应用 什么是chatgpt&#xff1f; chatgpt相关技术的发展 为什么用chatgpt写代码会特别的快呢&#xff1f; 因为它集成了GitHub上所有开发者的库公用资源&…

供需两端催化口腔医疗服务市场增长 未来将呈现线上化、智能化、品质化三大趋势

一、口腔医疗服务行业概述 口腔由唇、颊、舌、腭、涎腺、牙和颌骨等部分组成。口腔疾病种类繁多&#xff0c;伴随人全生命周期&#xff0c;常见疾病有龋病、牙周疾病、牙髓病、根尖周病、牙齿缺损、错颌畸形等&#xff0c;多数口腔疾病的发病率高&#xff0c;诊疗需求大。除此…

原型设计工具即时设计、Axure、Figma、Sketch,哪个更好用?

在线网页原型图设计软件的使用与桌面端相比具备优势&#xff0c;因为在线网页原型图设计软件的使用全程不需要安装&#xff0c;而且在线网页原型图设计软件也没有任何地点上的限制&#xff0c;更主要的是在线网页原型图设计软件在操作系统上也没有限制&#xff0c;不论是现在使…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术应用

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

服务型企业如何使用飞项实现项目化管理?

服务型企业的业务模式一般都是按项目来运作的&#xff0c;其业务分为售前&#xff0c;售中和售后三个阶段&#xff0c;分别由不同部门和人员对客户进行个性化服务。在这个过程中需要对人、流程和知识的高效统筹管理&#xff0c;即项目的整体管理&#xff0c;因此存在着不小的挑…

git lfs简易使用教程

参考资料&#xff1a; https://zzz.buzz/zh/2016/04/19/the-guide-to-git-lfs/ 这篇随笔简单记录一下git lfs的使用教程&#xff0c;只记录最为常用的部分&#xff0c;并阐述原理&#xff0c;方便后面查阅。 首先说明一下git lfs的原理&#xff0c;看名称&#xff1a;git lfs。…
最新文章