Go 语言学习


菜鸟教程 - Go语言教程:http://www.runoob.com/go/go-tutorial.html
Go语言入门教程,Golang入门教程(非常详细):http://c.biancheng.net/golang
易百 - Go语言教程:https://www.yiibai.com/go
《Go入门指南》电子书:https://www.kancloud.cn/kancloud/the-way-to-go/72432
笨鸟学Go——最简单的Go教程:http://www.slowbirdgogogo.com/​​​​

Go 语言相关书籍:京东搜索 go 的相关书籍

 

Microsoft Visual Studio Code:https://blog.csdn.net/freeking101/article/details/86715578

 

 

打算开始学习 go 语言,就搜了下go 的资料,先按上面链接把 Go 语言基础过一遍。最好按 一个网站来看,比如把 菜鸟教程上面 Go语言教程 从头看到尾。然后在看其他网站教程,这时候可以不像 看 菜鸟网上教程那么仔细,但是注意多写程序练习。

上面都看完之后,可以找一些实战项目练习下,或者把以前用 Python 写的爬虫用 go 在重写下。

 

 

GO 语言新手:8个实战教程:

基础教程:

  • Go语言编程

  • Go by Example 中文版

实战项目:

  • 《 Go 语言实战 》 快速开始一个 Go 程序

  • GO语言开发2048

  • GO语言制作Markdown预览器

  • 基于GO语言Revel框架和mgo的博客

  • Go 语言实现缓存系统

  • Go 语言实现WebSocket协议

最后:

希望以上8个教程能给你学习GO语言有所帮助,如果你想要学习其他技术领域,可以看下面:

  • 学习路径:12条技术路径,照着路径系统学习,入门该领域;
  • 海量教程:基础、实战项目,各技术领域应有尽有,更有在线开发环境随时玩;
  • 挑战比赛:学完之后,参加挑战,看看自己水平如何,更可以参加比赛,PK实力;’

 

 

Go 语言环境安装

 

安装包下载地址为:https://golang.org/dl/。

如果打不开可以使用这个地址:https://golang.google.cn/dl/。

各个系统对应的包名:

操作系统包名
Windowsgo1.4.windows-amd64.msi
Linuxgo1.4.linux-amd64.tar.gz
Macgo1.4.darwin-amd64-osx10.8.pkg
FreeBSDgo1.4.freebsd-amd64.tar.gz

 

UNIX/Linux/Mac OS X, 和 FreeBSD 安装

以下介绍了在UNIX/Linux/Mac OS X, 和 FreeBSD系统下使用源码安装方法:

1、下载二进制包:go1.4.linux-amd64.tar.gz。

2、将下载的二进制包解压至 /usr/local目录。

tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz

3、将 /usr/local/go/bin 目录添加至PATH环境变量:

export PATH=$PATH:/usr/local/go/bin

注意:MAC 系统下你可以使用 .pkg 结尾的安装包直接双击来完成安装,安装目录在 /usr/local/go/ 下。


Windows 系统下安装

Windows 下可以使用 .msi 后缀(在下载列表中可以找到该文件,如go1.4.2.windows-amd64.msi)的安装包来安装。

默认情况下.msi文件会安装在 c:\Go 目录下。你可以将 c:\Go\bin 目录添加到 PATH 环境变量中。添加后你需要重启命令窗口才能生效。

安装测试

创建工作目录 C:\>Go_WorkSpace。

文件名: test.go,代码如下:

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

使用 go 命令执行以上代码输出结果如下:

C:\Go_WorkSpace>go run test.go
Hello, World!

 

 

 

Go 语言结构

 

Go 语言的基础组成有以下几个部分:

  • 包声明
  • 引入包
  • 函数
  • 变量
  • 语句 & 表达式
  • 注释

接下来让我们来看下简单的代码,该代码输出了"Hello World!":

package mainimport "fmt"func main() {/* 这是我的第一个简单的程序 */fmt.Println("Hello, World!")
}

看下以上程序的各个部分:

  1. 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

  2. 下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。

  3. 下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。

  4. 下一行 /*...*/ 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。

  5. 下一行 fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。 
    使用 fmt.Print("hello, world\n") 可以得到相同的结果。 
    Print 和 Println 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。

  6. 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。

 

执行 Go 程序

让我们来看下如何编写 Go 代码并执行它。步骤如下:

  1. 打开编辑器如Sublime2,将以上代码添加到编辑器中。

  2. 将以上代码保存为 hello.go

  3. 打开命令行,并进入程序文件保存的目录中。

  4. 输入命令 go run hello.go 并按回车执行代码。

  5. 如果操作正确你将在屏幕上看到 "Hello World!" 字样的输出。

$ go run hello.go
Hello, World!

 

注意

需要注意的是 { 不能单独放在一行,所以以下代码在运行时会产生错误:

package mainimport "fmt"func main()  
{  // 错误,{ 不能在单独的行上fmt.Println("Hello, World!")
}

 

 

 

Learn X in Y minutes

 

Go语言有非常棒的标准库,还有一个充满热情的社区。

// 单行注释
/* 多行注释 */// 导入包的子句在每个源文件的开头。
// Main比较特殊,它用来声明可执行文件,而不是一个库。
package main// Import语句声明了当前文件引用的包。
import ("fmt"       // Go语言标准库中的包"io/ioutil" // 包含一些输入输出函数m "math"    // 数学标准库,在此文件中别名为m"net/http"  // 一个web服务器包"os"        // 系统底层函数,如文件读写"strconv"   // 字符串转换
)// 函数声明:Main是程序执行的入口。
// 不管你喜欢还是不喜欢,反正Go就用了花括号来包住函数体。
func main() {// 往标准输出打印一行。// 用包名fmt限制打印函数。fmt.Println("天坑欢迎你!")// 调用当前包的另一个函数。beyondHello()
}// 函数可以在括号里加参数。
// 如果没有参数的话,也需要一个空括号。
func beyondHello() {var x int   // 变量声明,变量必须在使用之前声明。x = 3       // 变量赋值。// 可以用:=来偷懒,它自动把变量类型、声明和赋值都搞定了。y := 4sum, prod := learnMultiple(x, y)        // 返回多个变量的函数fmt.Println("sum:", sum, "prod:", prod) // 简单输出learnTypes()                            // 少于y分钟,学的更多!
}/* <- 快看快看我是跨行注释_(:з」∠)_
Go语言的函数可以有多个参数和 *多个* 返回值。
在这个函数中, `x`、`y` 是参数,
`sum`、`prod` 是返回值的标识符(可以理解为名字)且类型为int
*/
func learnMultiple(x, y int) (sum, prod int) {return x + y, x * y // 返回两个值
}// 内置变量类型和关键词
func learnTypes() {// 短声明给你所想。str := "少说话多读书!" // String类型s2 := `这是一个
可以换行的字符串` // 同样是String类型// 非ascii字符。Go使用UTF-8编码。g := 'Σ' // rune类型,int32的别名,使用UTF-8编码f := 3.14195 // float64类型,IEEE-754 64位浮点数c := 3 + 4i  // complex128类型,内部使用两个float64表示// Var变量可以直接初始化。var u uint = 7  // unsigned 无符号变量,但是实现依赖int型变量的长度var pi float32 = 22. / 7// 字符转换n := byte('\n') // byte是uint8的别名// 数组(Array)类型的大小在编译时即确定var a4 [4] int              // 有4个int变量的数组,初始为0a3 := [...]int{3, 1, 5}     // 有3个int变量的数组,同时进行了初始化// Array和slice各有所长,但是slice可以动态的增删,所以更多时候还是使用slice。s3 := []int{4, 5, 9}    // 回去看看 a3 ,是不是这里没有省略号?s4 := make([]int, 4)    // 分配4个int大小的内存并初始化为0var d2 [][]float64      // 这里只是声明,并未分配内存空间bs := []byte("a slice") // 进行类型转换// 切片(Slice)的大小是动态的,它的长度可以按需增长// 用内置函数 append() 向切片末尾添加元素// 要增添到的目标是 append 函数第一个参数,// 多数时候数组在原内存处顺次增长,如s := []int{1, 2, 3}     // 这是个长度3的slices = append(s, 4, 5, 6)  // 再加仨元素,长度变为6了fmt.Println(s) // 更新后的数组是 [1 2 3 4 5 6]// 除了向append()提供一组原子元素(写死在代码里的)以外,我们// 还可以用如下方法传递一个slice常量或变量,并在后面加上省略号,// 用以表示我们将引用一个slice、解包其中的元素并将其添加到s数组末尾。s = append(s, []int{7, 8, 9}...) // 第二个参数是一个slice常量fmt.Println(s)  // 更新后的数组是 [1 2 3 4 5 6 7 8 9]p, q := learnMemory()       // 声明p,q为int型变量的指针fmt.Println(*p, *q)         // * 取值// Map是动态可增长关联数组,和其他语言中的hash或者字典相似。m := map[string]int{"three": 3, "four": 4}m["one"] = 1// 在Go语言中未使用的变量在编译的时候会报错,而不是warning。// 下划线 _ 可以使你“使用”一个变量,但是丢弃它的值。_, _, _, _, _, _, _, _, _, _ = str, s2, g, f, u, pi, n, a3, s4, bs// 通常的用法是,在调用拥有多个返回值的函数时,// 用下划线抛弃其中的一个参数。下面的例子就是一个脏套路,// 调用os.Create并用下划线变量扔掉它的错误代码。// 因为我们觉得这个文件一定会成功创建。file, _ := os.Create("output.txt")fmt.Fprint(file, "这句代码还示范了如何写入文件呢")file.Close()// 输出变量fmt.Println(s, c, a4, s3, d2, m)learnFlowControl() // 回到流程控制
}// 和其他编程语言不同的是,go支持有名称的变量返回值。
// 声明返回值时带上一个名字允许我们在函数内的不同位置
// 只用写return一个词就能将函数内指定名称的变量返回
func learnNamedReturns(x, y int) (z int) {z = x * yreturn // z is implicit here, because we named it earlier.
}// Go全面支持垃圾回收。Go有指针,但是不支持指针运算。
// 你会因为空指针而犯错,但是不会因为增加指针而犯错。
func learnMemory() (p, q *int) {// 返回int型变量指针p和qp = new(int)    // 内置函数new分配内存// 自动将分配的int赋值0,p不再是空的了。s := make([]int, 20)    // 给20个int变量分配一块内存s[3] = 7                // 赋值r := -2                 // 声明另一个局部变量return &s[3], &r        // & 取地址
}func expensiveComputation() int {return 1e6
}func learnFlowControl() {// If需要花括号,括号就免了if true {fmt.Println("这句话肯定被执行")}// 用go fmt 命令可以帮你格式化代码,所以不用怕被人吐槽代码风格了,// 也不用容忍别人的代码风格。if false {// pout} else {// gloat}// 如果太多嵌套的if语句,推荐使用switchx := 1switch x {case 0:case 1:// 隐式调用break语句,匹配上一个即停止case 2:// 不会运行}// 和if一样,for也不用括号for x := 0; x < 3; x++ { // ++ 自增fmt.Println("遍历", x)}// x在这里还是1。为什么?// for 是go里唯一的循环关键字,不过它有很多变种for { // 死循环break    // 骗你的continue // 不会运行的}// 用range可以枚举 array、slice、string、map、channel等不同类型// 对于channel,range返回一个值,// array、slice、string、map等其他类型返回一对儿for key, value := range map[string]int{"one": 1, "two": 2, "three": 3} {// 打印map中的每一个键值对fmt.Printf("索引:%s, 值为:%d\n", key, value)}// 如果你只想要值,那就用前面讲的下划线扔掉没用的for _, name := range []string{"Bob", "Bill", "Joe"} {fmt.Printf("你是。。 %s\n", name)}// 和for一样,if中的:=先给y赋值,然后再和x作比较。if y := expensiveComputation(); y > x {x = y}// 闭包函数xBig := func() bool {return x > 100 // x是上面声明的变量引用}fmt.Println("xBig:", xBig()) // true (上面把y赋给x了)x /= 1e5                     // x变成10fmt.Println("xBig:", xBig()) // 现在是false// 除此之外,函数体可以在其他函数中定义并调用,// 满足下列条件时,也可以作为参数传递给其他函数://   a) 定义的函数被立即调用//   b) 函数返回值符合调用者对类型的要求fmt.Println("两数相加乘二: ",func(a, b int) int {return (a + b) * 2}(10, 2)) // Called with args 10 and 2// => Add + double two numbers: 24// 当你需要goto的时候,你会爱死它的!goto love
love:learnFunctionFactory() // 返回函数的函数多棒啊learnDefer()      // 对defer关键字的简单介绍learnInterfaces() // 好东西来了!
}func learnFunctionFactory() {// 空行分割的两个写法是相同的,不过第二个写法比较实用fmt.Println(sentenceFactory("原谅")("当然选择", "她!"))d := sentenceFactory("原谅")fmt.Println(d("当然选择", "她!"))fmt.Println(d("你怎么可以", "她?"))
}// Decorator在一些语言中很常见,在go语言中,
// 接受参数作为其定义的一部分的函数是修饰符的替代品
func sentenceFactory(mystring string) func(before, after string) string {return func(before, after string) string {return fmt.Sprintf("%s %s %s", before, mystring, after) // new string}
}func learnDefer() (ok bool) {// defer表达式在函数返回的前一刻执行defer fmt.Println("defer表达式执行顺序为后进先出(LIFO)")defer fmt.Println("\n这句话比上句话先输出,因为")// 关于defer的用法,例如用defer关闭一个文件,// 就可以让关闭操作与打开操作的代码更近一些return true
}// 定义Stringer为一个接口类型,有一个方法String
type Stringer interface {String() string
}// 定义pair为一个结构体,有x和y两个int型变量。
type pair struct {x, y int
}// 定义pair类型的方法,实现Stringer接口。
func (p pair) String() string { // p被叫做“接收器”// Sprintf是fmt包中的另一个公有函数。// 用 . 调用p中的元素。return fmt.Sprintf("(%d, %d)", p.x, p.y)
}func learnInterfaces() {// 花括号用来定义结构体变量,:=在这里将一个结构体变量赋值给p。p := pair{3, 4}fmt.Println(p.String()) // 调用pair类型p的String方法var i Stringer          // 声明i为Stringer接口类型i = p                   // 有效!因为p实现了Stringer接口(类似java中的塑型)// 调用i的String方法,输出和上面一样fmt.Println(i.String())// fmt包中的Println函数向对象要它们的string输出,实现了String方法就可以这样使用了。// (类似java中的序列化)fmt.Println(p) // 输出和上面一样,自动调用String函数。fmt.Println(i) // 输出和上面一样。learnVariadicParams("great", "learning", "here!")
}// 有变长参数列表的函数
func learnVariadicParams(myStrings ...interface{}) {// 枚举变长参数列表的每个参数值// 下划线在这里用来抛弃枚举时返回的数组索引值for _, param := range myStrings {fmt.Println("param:", param)}// 将可变参数列表作为其他函数的参数列表fmt.Println("params:", fmt.Sprintln(myStrings...))learnErrorHandling()
}func learnErrorHandling() {// ", ok"用来判断有没有正常工作m := map[int]string{3: "three", 4: "four"}if x, ok := m[1]; !ok { // ok 为false,因为m中没有1fmt.Println("别找了真没有")} else {fmt.Print(x) // 如果x在map中的话,x就是那个值喽。}// 错误可不只是ok,它还可以给出关于问题的更多细节。if _, err := strconv.Atoi("non-int"); err != nil { // _ discards value// 输出"strconv.ParseInt: parsing "non-int": invalid syntax"fmt.Println(err)}// 待会再说接口吧。同时,learnConcurrency()
}// c是channel类型,一个并发安全的通信对象。
func inc(i int, c chan int) {c <- i + 1 // <-把右边的发送到左边的channel。
}// 我们将用inc函数来并发地增加一些数字。
func learnConcurrency() {// 用make来声明一个slice,make会分配和初始化slice,map和channel。c := make(chan int)// 用go关键字开始三个并发的goroutine,如果机器支持的话,还可能是并行执行。// 三个都被发送到同一个channel。go inc(0, c) // go is a statement that starts a new goroutine.go inc(10, c)go inc(-805, c)// 从channel中读取结果并打印。// 打印出什么东西是不可预知的。fmt.Println(<-c, <-c, <-c) // channel在右边的时候,<-是读操作。cs := make(chan string)       // 操作string的channelcc := make(chan chan string)  // 操作channel的channelgo func() { c <- 84 }()       // 开始一个goroutine来发送一个新的数字go func() { cs <- "wordy" }() // 发送给cs// Select类似于switch,但是每个case包括一个channel操作。// 它随机选择一个准备好通讯的case。select {case i := <-c: // 从channel接收的值可以赋给其他变量fmt.Println("这是……", i)case <-cs: // 或者直接丢弃fmt.Println("这是个字符串!")case <-cc: // 空的,还没作好通讯的准备fmt.Println("别瞎想")}// 上面c或者cs的值被取到,其中一个goroutine结束,另外一个一直阻塞。learnWebProgramming() // Go很适合web编程,我知道你也想学!
}// http包中的一个简单的函数就可以开启web服务器。
func learnWebProgramming() {// ListenAndServe第一个参数指定了监听端口,第二个参数是一个接口,特定是http.Handler。go func() {err := http.ListenAndServe(":8080", pair{})fmt.Println(err) // 不要无视错误。}()requestServer()
}// 使pair实现http.Handler接口的ServeHTTP方法。
func (p pair) ServeHTTP(w http.ResponseWriter, r *http.Request) {// 使用http.ResponseWriter返回数据w.Write([]byte("Y分钟golang速成!"))
}func requestServer() {resp, err := http.Get("http://localhost:8080")fmt.Println(err)defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)fmt.Printf("\n服务器消息: `%s`", string(body))
}

更进一步

关于Go的一切你都可以在Go官方网站找到。 在那里你可以获得教程参考,在线试用,和更多的资料。 在简单的尝试过后,在官方文档那里你会得到你所需要的所有资料、关于编写代码的规范、库和命令行工具的文档与Go的版本历史。

强烈推荐阅读语言定义部分,很简单而且很简洁!(赶时髦!)

你还可以前往Go在线体验中心进,在浏览器里修改并运行这些代码,一定要试一试哦!你可以将https://play.golang.org当作一个REPL,在那里体验语言特性或运行自己的代码,连环境都不用配!

学习Go还要阅读Go标准库的源代码,全部文档化了,可读性非常好,可以学到go,go style和go idioms。在文档中点击函数名,源代码就出来了!

Go by example也是一个学习的好地方。

Go Mobile添加了对移动平台的支持(Android and iOS)。你可以完全用go语言来创造一个app或编写一个可以从Java或Obj-C调用的函数库,敬请参考Go Mobile page。

 

 

 

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

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

相关文章

李飞飞:让机器有分辨事物的“眼睛”

来源&#xff1a;中国新闻网很难有一项科技的发展像人工智能一样令人既期待又不安。若机器拥有了“自主意识”&#xff0c;人类将面对一个怎样的世界&#xff1f;在各类科幻作品中&#xff0c;人们的探讨层出不穷。和天马行空的文学想象不同&#xff0c;有着“AI女神”之称的华…

使用ABAP delete duplicate时遇到的问题

最近在使用abap delete duplicate时发现删除重复记录不完全。 只删除掉了部分重复记录。最后经过调试&#xff0c;没发现其它问题。于是再次研究delete duplicate语法 发现delete duplicate只删除相邻行的重复项&#xff0c;保留第一条记录&#xff0c;所以在对内表进行delete …

计算机计划300字作文,我的计划作文300字

我的2020年计划作文300字为了能够更快地实现自己的理想&#xff0c;我制定了一些有效的计划。下面我们来看看我的2020年计划作文300字&#xff0c;仅供大家参考&#xff01;我的2020年计划作文300字1眨眼间&#xff0c;寒假是十分快的&#xff0c;一眨眼些学期就会来临。进入中…

Java Web开发技术详解~MIME类型

MIME&#xff08;Multipurpose Internet Mail Extension&#xff09;是指多用途网络邮件扩展协议&#xff0c;这里的邮件不单纯值E-Mail&#xff0c;还可以包括通过各种应用层协议在网络上传输的数据。 遵守MIME协议的数据类型统称为MIME类型。在HTTP请求头和HTTP响应头中都有一…

Microsoft Visual Studio Code

Microsoft Visual Studio Code 中文手册&#xff1a;https://code.visualstudio.com/docs 官方快捷键大全&#xff1a;https://code.visualstudio.com/docs/customization/keybindings 第一次使用 VS Code 时你应该知道的一切配置&#xff1a;https://zhuanlan.zhihu.com/p/62…

2010年 Web的五项技术和五个趋势

2009 结束&#xff0c;2010 年的 Web 会是什么样&#xff0c;或者说&#xff0c;未来的 Internet 意味着什么&#xff0c;2010 会是值得关注的一年。本文从 5 个方面展望 2010 年的 Web&#xff0c;包括 HTML5&#xff0c;CSS3&#xff0c;字体服务技术&#xff1b;浏览器&…

利用HoloLens进行无人船舶驾驶!微软日本概念视频

来源&#xff1a;新浪游戏&#xff0c;AR联盟等平台微软日本公司最近推出一个新的概念视频&#xff0c;它展示了HoloLens将如何在相对不久的将来用于自动船舶驾驶上。尽管HoloLens主要是面向开发者和研究人员&#xff0c;但这项设备是站在向我们展示AR潜能的最前沿。最新的例子…

teamviewer企业版 添加计算机,teamviewer添加常用控制电脑列表的操作步骤

最近有不少的teamviewer用户们&#xff0c;会询问小编怎么teamviewer今日在这篇文章内小编就为你们带来了teamviewer添加常用控制电脑列表的操作步骤。teamviewer添加常用控制电脑列表的操作步骤首先我们注册一个TeamViewer账号&#xff1a;当我们注册账号后在右边登陆&#xf…

Spring Data JPA 从入门到精通~@EntityListeners注解示例

被Prepersist注解的方法 &#xff0c;完成save之前的操作。 被Preupdate注解的方法 &#xff0c;完成update之前的操作。 被PreRemove注解的方法 &#xff0c;完成remove之前的操作。 被Postpersist注解的方法 &#xff0c;完成save之后的操作。 被Postupdate注解的方法 &#…

WPF简介

WPF的全称是Windows Presentation Foundation&#xff0c;是微软新发布的Vista操作系统的三大核心开发库之一&#xff0c;其主要负责的是图形显示&#xff0c;所以叫Presentation&#xff08;呈现&#xff09;。 作为新的图形引擎&#xff0c;WPF是基于DirectX的&#xff0c;当…

简述 Python 的 Numpy、SciPy、Pandas、Matplotlib 的区别

From&#xff1a;https://www.jianshu.com/p/32cb09d84487 Numpy&#xff1a;基础的数学计算模块&#xff0c;以矩阵为主&#xff0c;纯数学。SciPy&#xff1a;基于Numpy&#xff0c;提供方法(函数库)直接计算结果&#xff0c;封装了一些高阶抽象和物理模型。比方说做个傅立叶…

干货|重磅发布:人工智能行业应用价值报告(PDF报告下载)

来源&#xff1a;机器人大讲堂报告下载&#xff1a;https://pan.baidu.com/s/1QEUOHqhQvxs9hEY6NLzPPg未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评…

五年级上册分数计算机,分数计算题 五年级上册分数加减法计算题(100道)

题目&#xff1a;五年级上册分数加减法计算题(100道)有口算,也要有脱式计算解答&#xff1a;(1)6/147/14 (2)2/135/13 (3)6/159/15 (4)6/141/14(5)4/132/13 (6)2/152/15 (7)1/62/6 (8)3/148/14(9)3/144/14 (10)4/125/12 (11)4/93/9 (12)4/141/14(13)6/81/8 (14)8/113/11 (15)1/…

Spring Data JPA 从入门到精通~@PreUpdate异常场景分析

1、执行save()后&#xff0c;再次save()&#xff0c;PreUpdate不再触发 2、Transient字段的变更&#xff0c;不会触发PreUpdate方法 3、PreUpdate 不适用加密/解密场景 1、执行save()后&#xff0c;再次save()&#xff0c;PreUpdate不再触发 实体&#xff1a; Entity Entit…

ubuntu修改键盘映射

ubuntu修改键盘映射 通过xmodmap -pk 命令找到右shift键得keycode&#xff0c;打算将右shift映射到我笔记本的等号键去&#xff0c;因为笔记本上的等号键还具有加号键得功能&#xff0c;所以需要以下命令&#xff1a; xmodmap -e “keycode 62 equal plus” 62是右shift的keyc…

全球卫星导航 看中国“北斗”

来源&#xff1a;光明日报 作者&#xff1a;袁于飞2017年12月3日&#xff0c;第四届世界互联网大会世界互联网领先科技成果发布活动在浙江乌镇举行&#xff0c;中国卫星导航系统管理办公室主任冉承其介绍北斗卫星导航系统。新华社记者 孟鼎博摄3月30日&#xff0c;我国在西昌卫…

逻辑思维强的人适合学计算机不,逻辑思维强的人适合什么工作?

逻辑思维强的人适合什么工作?逻辑思维题内容&#xff1a;逻辑思维是人的理性认识阶段&#xff0c;人运用概念、判断、推理等思维类型反映事物本质与规律的认识过程。是人们将感性认识提升为理性认识的必要能力。那么逻辑思维强的人适合什么工作呢?逻辑性强的人适合做什么1.逻…

ADSL 拨号代理的搭建

From&#xff1a;崔庆才 - 轻松获得海量稳定代理&#xff01;ADSL拨号代理的搭建 我们尝试维护过一个代理池。代理池可以挑选出许多可用代理&#xff0c;但是常常其稳定性不高、响应速度慢&#xff0c;而且这些代理通常是公共代理&#xff0c;可能不止一人同时使用&#xff0c;…

用AlphaGo设计材料合成实验

来源&#xff1a;曾林的科学网博客AlphaGo下围棋连挫顶尖高手最终孤独求败的故事几乎家喻户晓。这也引发了大家对人工智能的能力的广泛思考。在科学研究领域&#xff0c;比如说合成实验设计&#xff0c;传统的做法不外乎是依靠经验不断的尝试。纵然会有一些热力学基本规律作为指…

Lambda 表达式详解~简化匿名内部类

本节将介绍如何使用Lambda表达式简化匿名内部类的书写&#xff0c;但Lambda表达式并不能取代所有的匿名内部类&#xff0c;只能用来取代函数接口&#xff08;Functional Interface&#xff09;的简写。先别在乎细节&#xff0c;看几个例子再说。 例子1&#xff1a;无参函数的简…