go语言语法基础
文章目录
- 前言
- 一、输入和输出
- 常用的字符串格式化符号
- 二、注释
- 三、Go常用基本语言数据类型
- 数字类型
- 布尔类型
- 字符类型
- 变量与常量
- 数组和切片
- 数组
- 切片
- map类型
- 创建map
- 增
- 删
- 改
- 查
- 特别提醒
- 指针
- 四、运算符
- 五、条件判断语句
- if系列
- switch
- 六、循环语句
- for循环标准写法
- 死循环
- while循环
- do while
- 类似python的for循环
- 特别说明
- 七、break和continue
- 八、函数
- 无参数无返回值
- 有参数无返回值
- 有多个参数的函数
- 不定长参数的函数
- 没有返回值的函数
- 有返回值的函数
- 有多个返回值的函数(注意)
- 在返回值里定义变量(注意)
- 闭包函数(匿名函数)
- 将函数作为参数进行传递(注意)
- 值传递与引用传递
- 变量作用域
- 特别说明
- 九、类型转换
- 数字之间转换
- 字符型与数字类型之间的转换
- 将string-->int
- 将int-->string
- 将string-->float
- 将float-->string
- 总结
前言
考完研了,最近在学校安排的培训机构实习(懂得都懂),培训机构有几个方向,我选了go语言后端(本人java很烂,尚硅谷200个小时的视频我是真看不下去),本文记录一下go语言的语法基础。
还有就是,本博文的学习资料来源是菜鸟教程和枫枫知道的博文,后面会附上链接。
他们就相当于字典,面面俱到,本博文就相当于笔记,写一些注意事项,适合有其他语言基础的快速熟悉go语言,我主要是写一些需要注意的地方,这是我与他们不一样的地方
菜鸟教程-go语言
枫枫知道博客
枫枫知道B站go语言教程
一、输入和输出
换行输出
fmt.Println()
格式化输出
fmt.Printf()
常用的字符串格式化符号
%v 按值的本来值输出
%#v 输出GO语言语法格式的值
%T 输出GO语言语法格式的类型和值
%b 整型以二进制方式显示
%o 整型以八进制方式显示
%d 整型以十进制方式显示
%x 整型以十六进制方式显示
%X 整型以十六进制、字母大写方式显示
%f 浮点数
%p 指针,十六进制方式显示
%c 该值对应的unicode码值
输入
var a int//首先定义一个变量
fmt.Scan(&a)//然后写输入函数,记得带指针
二、注释
单行注释
//
多行注释
/*
*/
三、Go常用基本语言数据类型
数字类型
数字类型分为整型和浮点型,这个在其他语言里面也有,不再说了。
这里只想强调几点
1.我上面写的所有数据类型,请分别看成是一种数据类型,就是int是int,int8是int8,他们不是等价的
2.没有特殊需求,整数用int其实就行了。
3.uint是无符号整数,具体什么是无符号整数,百度或gpt吧,要是详细说都能写篇写小作文了。
布尔类型
其他语言也有布尔类型,这里依然只想强调1点
在go语言,1不能代表true,0不能代表false
字符类型
go语言里面跟很多语言也是一样的,分为byte和string类型,
在这个基础上,go语言还有个rune类型。
然后就是强调环节
go语言不像python,对于byte类型和string类型区别不明显。
在go语言里面,byte必须用 ‘’,也就是单引号给引起来
string类型使用双引号给引起来,如果需要输入很多文字,使用反单引号给引起来,也就是1左边的那个符号
var a byte = 'a'fmt.Printf("%c %d\n", a, a)var a1 uint8 = 97fmt.Printf("%c %d\n", a1, a1)
go语言里面的源码
rune这种数据类型跟byte的作用差不多,用来转换对应的码
var z rune = '中'
fmt.Printf("%c %d\n", z, z)
还有就是默认值问题,在go语言里面,如果你声明了一个变量,但是没有赋值,那么这个变量的值就是对应变量的零值
int就是0, bool就是false,字符串就是""
var n stringvar age intvar sex boolfmt.Printf("%#v\n", n)fmt.Printf("%#v\n", age)fmt.Printf("%#v\n", sex)
变量与常量
这里想说的是,
常量使用const来声明,必须在声明的时候就初始化,且一但初始化后就不能修改。
还有就是变量的声明,go语言的类型是在写后面,如果你之前写过java,刚开始应该是不太适应,写多了慢慢就适应了。
变量的声明有多种写法,选一个你喜欢的写就行了。这里也会写一些几种变量的声明。
//指定变量的类型
var a string = "hello world"
var b int = 1
var c, d int = 1, 2
//自行推断类型
var a = 1
a := 50 //先声明变量,后初始化
var a int
a = 1
注:后面的数组,切片,map等还可以使用make初始化
数组和切片
数组
数组类型就很像java里面的静态数组,确定大小后就不能改了,
想要扩大就要写代码来扩大数组,限制比较多。然后这个数组类型也支持索引,但是不支持逆向索引(就是从后面往前面数是,-1,-2,-3,…),下面写一个代码就行了
还有就是要注意边界值!!!
var nameList [3]string = [3]string{"ss", "aa", "bb"}fmt.Println(nameList)//索引,go语言没有逆向索引fmt.Println(nameList[0])fmt.Println(nameList[2])fmt.Println(nameList[len(nameList)-1])
这里想说的就是,go语言里面初始化数据类型的方式比较多,选一个自己喜欢的写法就行了。
切片
切片类型(Slice)就很像python里面的list,也就是动态数组
关于切片需要注意两个问题
1.长度和容量问题
在go语言里面长度指的是这个切片里面有多少个元素,容量是指底层里面可以装多少个元素。
我个人理解是,就相当于水杯,长度就是水杯里面有多少水,容量就是,这个杯子最大可以装多少水。
然后就是,切片类型当然支持自动扩容。
2.引用问题
切片是引用类型,切片是引用类型,多个切片可以引用同一个底层数组。修改一个切片的元素可能会影响其他引用了同一底层数组的切片。
关于切片就说这么多,这个需要多练,才能掌握。
map类型
map类型就是python里面的字典
创建map
这里还是要说一下,创建map依然有好几个写法,选一个自己喜欢的写就行了
var usermap = map[int]string{1: "枫枫",2: "张三",4: "",}fmt.Println(usermap)
增
fmt.Println(usermap)//增加usermap[5] = "你好"fmt.Println(usermap)
删
delete(usermap, 4)fmt.Println(usermap)
改
usermap[1] = "枫枫知道"fmt.Println(usermap)
查
fmt.Println(usermap[1])
特别提醒
map必须初始化才能使用
var amap map[string]stringamap["name"] = "枫枫"fmt.Println(amap)
指针
我是觉得跟c语言里面的指针是一模一样,请看下面这段代码
var ip *int var a int
fmt.Scan(&a)func deliver2(num *int) int {*num += 1return *num
}
跟c语言是不是一模一样
四、运算符
关于运算符,go语言里面该有的都有,这里依然只强调几点
1.go语言里面只有右++,没有左++,减减也是一样的(说说实话,我是觉得左右加加减减是不利于代码维护以及阅读,这样只有一个反而好一点,就那个左右加加减减的面试题,现在让我做我也不一定做的对)
2.记不住优先级就加括号
五、条件判断语句
这里只想写个写法,跟其他有没有除了写法没有其他区别
if系列
如果你学过其他语言,稍微看一下就行了
if 布尔表达式 {//是的,条件这里没有括号/* 在布尔表达式为 true 时执行 */
}if 布尔表达式 {/* 在布尔表达式为 true 时执行 */
} else {/* 在布尔表达式为 false 时执行 */
}
if 布尔表达式 {/* 在布尔表达式为 true 时执行 */
} else if 布尔表达式 {/* 在布尔表达式为 true 时执行 */
} else {/* 在布尔表达式为 false 时执行 */
}//中断式 谓语句if age <= 0 {fmt.Println("未出生")return}if age <= 18 {fmt.Println("未成年")return}if age <= 35 {fmt.Println("青少年")return}fmt.Println("中年")
//嵌入式写法if age <= 18 {if age <= 0 {fmt.Println("未出生")} else {fmt.Println("未成年")}} else {if age <= 35 {fmt.Println("青年")} else {fmt.Println("中年")}}
switch
这里要注意
1.go语言里面的switch case 默认case后面自带break(是的,不会出现java里面没写break,然后执行到其他case的情况)
2.go语言里面的case可以写判断条件(我记得java里面就是只能写个数字)
下面两段代码,看一下就行了
func main() {fmt.Println("请输入你的年龄:")var age intfmt.Scan(&age)switch {case age <= 0:fmt.Println("未出生")case age <= 18:fmt.Println("未成年")case age <= 35:fmt.Println("青年")default:fmt.Println("中年")}
}
func main() {fmt.Println("请输入星期数字:")var week intfmt.Scan(&week)switch week {case 1:fmt.Println("周一")case 2:fmt.Println("周二")case 3:fmt.Println("周三")case 4:fmt.Println("周四")case 5:fmt.Println("周五")case 6, 7:fmt.Println("周末")default:fmt.Println("错误")}
}
六、循环语句
go语言里面的循环语句只有for语句,没有while语句。
go语言的理念里,认为for循环也可以实现while循环,所以就没有while循环
还有就是go语言里面也没有do while语句,但是也可以使用for循环来实现。
下面就是代码
for循环标准写法
//求100以内的和
//跟java,c是不是很像
//但我不知道为什么go语言不喜欢写括号
sum := 0for i := 0; i <= 100; i++ {fmt.Println(i)sum += i}fmt.Println(sum)
死循环
//死循环for i := 0; true; i++ {}//这样写死循环也是可以的for true{}for {}
while循环
//go语言没有while循环,下面是go语言里面的while模式var sum intvar i int = 1for i <= 100 {sum += ii++}fmt.Println(sum)
do while
//do while 模式sum := 0var i int = 1for {sum += ii++if i == 101 {break}}fmt.Println(sum)
类似python的for循环
//类似python一样的for循环var list = []string{"枫枫", "知道"}for index, item := range list {fmt.Println(index, item)}
特别说明
go语言认为变量定义了就要使用,不然就会报错,你不使用这个变量就不要定义。但是我们必须要接收两个变量该怎么办呢?
可以使用下划线来代替这个变量,这个在go语言里面就可以理解为占位用的。比如下面这段代码
var list = []string{"枫枫", "知道"}for _, item := range list {fmt.Println(index, item)}
在这段代码中,假如我不需要index,就可以写成下划线。
七、break和continue
跟其他语言里面的作用是一模一样,没有要补充的
八、函数
go语言里面的函数,我愿称之为抽象,我是真没见过如此抽象的东西,我都不知道这里能不能写清楚。
我在之前说go语言里面 if 和 for 循环不知道为什么不喜欢写括号,现在你会函数里面疯狂写括号
先来简单一点
无参数无返回值
func sayHello() {fmt.Println("hello")
}
有参数无返回值
func param1(id string) {fmt.Println(id)
}
有多个参数的函数
func param2(id string, userName string) {fmt.Println(id, userName)
}// 当多个参数的数据类型相同的时候,写一个就行了
func param3(id, userName string) {fmt.Println(id, userName)
}
不定长参数的函数
类比python里面的不定长参数
// 没有确定长度的参数
func add(numerList ...int) {var sum intfor _, i2 := range numerList {sum += i2}fmt.Println(sum)
}
没有返回值的函数
// 没有返回值的函数
func r1() {// 没有返回值return
}
有返回值的函数
func r2() bool {return false
}
有多个返回值的函数(注意)
友友们,注意了,第一个括号来了,如果你想返回多个值,要加个括号。这里算是go语言的特性,我记得java基础里面函数是只能返回一个数据,python里面,虽然return可以返回多个变量,但是python会自动给你转成tuple类型,但是这里就真的是多个变量,你接收的时候也需要多个变量
// 有多个返回值的函数
func r3() (string, bool) {return "", false
}
func main() {a, b := r3()fmt.Printf("%#v,%#v", a, b)}
在返回值里定义变量(注意)
友友们还记得上面我们说的默认值吗?这里可以说是go语言的特性。
在返回值里定义了参数,然后直接写个return就会默认返回定义在返回值里面的数,我们也可以对返回值里的变量进行修改,那么,最后返回的时候,就是我们修改过的返回的变量。
func r4() (val string, ok bool) {if true {val = "12"return}return
}func main() {a, b := r4()fmt.Printf("%#v,%#v", a, b)}
闭包函数(匿名函数)
// 定义一个匿名函数并将其赋值给变量addadd := func(a, b int) int {return a + b}// 调用匿名函数result := add(3, 5)fmt.Println("3 + 5 =", result)
将函数作为参数进行传递(注意)
go语言里面还可以将函数作为参数来进行传递。
注意,go语言里面不能写函数嵌套,但是我们可以将函数作为参数进行传递,来实现嵌套(其实还是匿名函数)
func awaitAdd(awaitSecond int) func(...int) int {return func(numberList ...int) (sum int) {for _, i2 := range numberList {sum += i2}return sum}
}func getSequence() func() int {i:=0return func() int {i+=1return i }
}
值传递与引用传递
一句话就是,值传递相当于传递了变量的副本,函数内部是对变量的副本进行修改,不会对变量本身产生任何影响,引用传递就是把变量的指针给传递过去,这样函数内部的任何变化也会引起外部变量的修改。写法跟c语言是一模一样
package mainimport "fmt"func deliver(num int) int {num += 1return num
}func deliver2(num *int) int {*num += 1return *num
}func main() {num := 1fmt.Println("没有传递给deliver之前的值:", num)fmt.Println("经过deliver之后的值", deliver(num))fmt.Println("外面的值", num)//&是取地址,*是解引用,去这个地址指向的值fmt.Println("没有传递给deliver2之前的值:", num)fmt.Println("经过deliver之后的值", deliver2(&num))fmt.Println("外面的值", num)}
变量作用域
看代码吧,简单说就是定义在任何函数之外的变量。
package main
//全局变量
var a int = 1
func main() {
//局部变量和
var b int = 1
}
特别说明
在全局变量里面,使用const定义的常量 ,大写开头可以被其他go语言文件访问到,但是小写开头不行。
package versionconst Version = "1.1.1.1"
九、类型转换
说明一下,go语言不支持隐式转换类型,必须要写怎么转
数字之间转换
var a int = 10
var b float64 = float64(a)
字符型与数字类型之间的转换
将string–>int
var str string = "10"
var num int
num, _ = strconv.Atoi(str)
将int–>string
num := 123str := strconv.Itoa(num)fmt.Printf("整数 %d 转换为字符串为:'%s'\n", num, str)
将string–>float
str := "3.14"num, err := strconv.ParseFloat(str, 64)if err != nil {fmt.Println("转换错误:", err)} else {fmt.Printf("字符串 '%s' 转为浮点型为:%f\n", str, num)}
将float–>string
num := 3.14str := strconv.FormatFloat(num, 'f', 2, 64)fmt.Printf("浮点数 %f 转为字符串为:'%s'\n", num, str)
总结
到这里,go语言基础部分讲的差不多了,剩下的就是go语言的类似面向对象的东西(结构体,接口),异常处理,I/O操作,反射,泛型,协程,channel(特性)等东西了。后面我还会再写,今天再放在一起就太多了。然后,有什么问题可以提出来,博主看到后会马上修改。谢谢。
记得点个赞和收藏
相关文章:

go语言语法基础
文章目录 前言一、输入和输出常用的字符串格式化符号 二、注释三、Go常用基本语言数据类型数字类型布尔类型字符类型变量与常量数组和切片数组切片 map类型创建map增删改查特别提醒 指针 四、运算符五、条件判断语句if系列switch六、循环语句for循环标准写法死循环while循环do …...
eclipse 和java环境的安装教程
安装 Eclipse 和配置 Java 环境是一个多步骤的过程,涉及到安装 Java Development Kit (JDK) 和 Eclipse IDE。以下是基本步骤: 安装 Java Development Kit (JDK) 下载 JDK: 访问 Oracle 官方网站(Oracle JDK)或者选择…...

Win11系统的优化方法参考文档(彻底优化策略)
目录 一、个性化-应用-关闭防火墙等的设置 二、任务栏优化设置 三、Win11开始菜单更改为Win10经典菜单 四、将Micresoft Store 从固定任务栏取消 五、电源性能优化 六、解决卡顿 七、卸载系统自带软件 八、任务管理器开机启动项的禁用 九、调整为最佳性能 十…...

Leetcode13-解密消息(2325)
1、题目 给你字符串 key 和 message ,分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下: 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。 将替换表与普通英文字母表对齐,形成对照表。 按照对照表 …...

二进制安装包安装Prometheus插件安装(mysql_exporter)
简介 mysql_exporter是用来收集MysQL或者Mariadb数据库相关指标的,mysql_exporter需要连接到数据库并有相关权限。既可以用二进制安装部署,也可以通过容器形式部署,但为了数据收集的准确性,推荐二进制安装。 一,下载安…...

原生微信小程序如何动态修改svg图片颜色及尺寸、宽高(封装svgIcon组件)
最终效果 前言 动态设置Svg图片颜色就是修改Svg源码的path中的fill属性, 通过wx.getFileSystemManager().readFile读取.xlsx文件 把文件转成base64 封装svg-icon组件 1、在项目的components下新建svg-icon文件夹,新增base64.js文件 class Base64 {cons…...

Python从入门到网络爬虫(面向对象详解)
前言 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本…...

NPDP产品经理含金量高吗?难考吗?
NPDP的中文翻译为产品经理国际资格认证。NPDP考试起源于美国,由美国产品开发与管理协会(PDMA)发起。NPDP认证是集理论、方法与实践为一体的全方位知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。࿰…...

目标检测 YOLOv5 - 推理时的数据增强
目标检测 YOLOv5 - 推理时的数据增强 flyfish 版本 YOLOv5 6.2 参考地址 https://github.com/ultralytics/yolov5/issues/303在训练时可以使用数据增强,在推理阶段也可以使用数据增强 在测试使用数据增强有个名字叫做Test-Time Augmentation (TTA) 实际使用中使…...

篇二:springboot2.7 OAuth2 server使用jdbc存储RegisteredClient
上一篇 <<springboot 2.7 oauth server配置源码走读一>>中简单描述了oauth2 server的配置,其中使用了内存保存 RegisteredClient,本篇改用mysql存储。 db存储需要创建表,表结构应该是什么样的呢,从spring给我们封装好…...

卷积神经网络|导入图片
在学习卷积神经网络时,我们通常使用的就是公开的数据集,这里,我们不使用公开数据集,直接导入自己的图片数据,下面,就简单写个程序实现批量图片的导入。 import osfrom PIL import Imageimport numpy as np…...
关于unity的组件VerticalLayoutGroup刷新显示不正常的问题
先说明一下我是如何用到,有哪些处理的 用到这个组件基本上都是将列表进行排版操作的,竖着,或者横着,横着用HorizontalLayoutGroup 还有一个和这个组件搭配的组件叫ContentSizeFitter 先说我是怎么发现这个组件不好用的 //本地读取…...

wait 和 notify 这个为什么要在synchronized 代码块中?
一个工作七年的小伙伴,竟然不知道” wait”和“notify”为什么要在 Synchronized 代码块中 。 好吧,如果屏幕前的你也不知道,请在公屏上刷”不知道“。 对于这个问题,我们来看看普通人和高手的回答。 一、问题解析 1. wait 和 n…...

大白话说区块链和通证
1 区块链 简单地说,区块链其实就像是一个不可篡改的分布式数据库,该分布式数据库记录了一系列交易或事件。区块链运行在至少1个以上的节点上,每个节点都有自己的一个分布式数据库,也就是分布式账本。正常情况下,每个节…...
Jvm之垃圾收集器(个人见解仅供参考)
问:什么是垃圾收集算法中的分代收集理论? 答:分代收集理论是垃圾收集算法的一种思想,根据对象存活周期的不同将内存分为几块,一般将java堆分为新生代和老年代。这种理论使得我们可以根据各个年代的特点选择合适的垃圾收…...

Minitab 21软件安装包下载及安装教程
Minitab 21下载链接:https://docs.qq.com/doc/DUkNHZVhwTXhtTFla 1.选中下载好的安装包,鼠标右键解压到”Minitab 21“文件夹 2.选中”Setup.exe“,鼠标右击选择“以管理员身份运行” 3.点击“下一步” 4.点击“是” 5.点击“下一步” 6.勾选…...

Java版商城:Spring Cloud+SpringBoot b2b2c电子商务平台,多商家入驻、直播带货及免 费 小程序商城搭建
随着互联网的快速发展,越来越多的企业开始注重数字化转型,以提升自身的竞争力和运营效率。在这个背景下,鸿鹄云商SAAS云产品应运而生,为企业提供了一种简单、高效、安全的数字化解决方案。 鸿鹄云商SAAS云产品是一种基于云计算的…...
阿里云被拉入黑洞模式怎么办?该怎么换ip-速盾网络
被拉入黑洞模式(BGP黑洞路由)意味着所有进入目标IP的流量都会被丢弃,从而导致目标IP对外完全不可访问。这种情况通常发生在面对大规模DDoS攻击时,为了防止攻击流量对其他网络造成影响。如果你使用的是阿里云服务并遭受到这种攻击&…...
Android 13.0 recovery竖屏界面旋转为横屏
1.概述 在13.0系统项目定制化开发中,由于平板固定横屏显示,而如果recovery界面竖屏显示就觉得怪怪的,所以需要recovery页面横屏显示的功能, 所以今天就来解决这个问题 2.实现功能相关分析 Android的Recovery中,利用 bootable\recovery下的minui库作为基础,采用的是直接…...

异地环控设备如何远程维护?贝锐蒲公英解决远程互联难题
青岛某企业致力于孵化设备、养禽设备和养猪设备的研发、生产和服务,历经三十多年发展,目前已成长为行业主要的养殖装备及工程服务提供商,产品覆盖养殖产业链中绝大多数环节,涉及自动化设备、环控设备、整体解决方案等。 在实际应用…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...