Java转Go快速入门教程

1 背景和综述

  1. 作者作为校招新人入职,公司用Golang, 自己有Java、PHP的 Web 开经验,熟悉前端的Vue技术栈,在此之前没写过Golang项目,只是几个月前按照菜鸟教程看了一遍Golang的语法 ,了解其天生高并发的特性,知道其有协程、管道这两个重要的特性。

  2. 入职当天就要求自学做一个Golang的新手村任务,做一个分布式的在2000并发访问下能够做到1000QPS的登录注册,期限一周,要求细节不便透露,这里就不详细展开了,本文所分享的干货主要来自于这个新手村任务的积累。

  3. Golang 语法入门很简单,但是根据我的入门经验,最容易对初学者造成困扰的是代码的组织形式,稍有语法基础的读者建议直接看 2.2 代码组织部分。


2 Golang 的常用语法以及代码组织

2.1 语法

  1. 如果你曾经系统地看过Golang的语法,那么这里我向你推荐 y 分钟学会 x语言系列教程,以及其搬运的国内版本,通过这个可以快速地把语法复习一遍(语法没必要背,都是用的多了就记住了)
  2. 如果你不曾系统看过Golang语法,那么没关系,认真看完下面这个代码,就足够了
// 单行注释
/* 多行
    注释 */
// go的IDE我推荐Vscode,Goland也不错,前者我自用,后者同同事都在用
// 用 go 开发时注释中也会经常见到文档注解,如 @Version 1.0.0

// 导入包的子句在每个源文件的开头。
// Main比较特殊,它用来声明可执行文件,而不是一个库。
package main

// Import语句声明了当前文件引用的包。
import (
    "fmt"       // Go语言标准库中的包
    "net/http"  // 一个web服务器包
    "strconv"   // 字符串转换
    "strings"   // 字符串标准库
)
// 等你写习惯了go不带分好,写Java会很变扭

// 函数声明:Main是程序执行的入口。
// 不管你喜欢还是不喜欢,反正Go就用了花括号来包住函数体,花括号配合严格的缩进,代码非常易读。
func main() {
   
    // 往标准输出打印一行。
    // 用包名fmt限制打印函数。
    fmt.Println("Hello world!")
	// 写项目时用 log.Println("Hello world!") 会更多
	
    // 调用当前包的另一个函数。
    beyondHello()
}

// 函数可以在括号里加参数。
// 如果没有参数的话,也需要一个空括号。
func beyondHello() {
   
    var x int   // 变量声明,变量必须在使用之前声明。
    x = 3       // 变量赋值。
    // 可以用:=来偷懒,它自动把变量类型、声明和赋值都搞定了,这个在项目中最常用。
    y := 4
    sum, prod := learnMultiple(x, y)        // 返回多个变量的函数
    fmt.Println("sum:", sum, "prod:", prod) // 简单输出
    learnTypes()                            // 少于y分钟,学的更多!
}

// 多变量和多返回值的函数
func learnMultiple(x, y int) (sum, prod int) {
   
    return x + y, x * y // 返回两个值
    /*
	// 因为这里返回值不仅有类型,还写了名称,因此函数体其实还可以这么写
	sum = x + y // 注意这里不是 := 
	prod = x * y
	return
	*/
}

// 内置变量类型和关键词
func learnTypes() {
   
    // 短声明给你所想。
    s := "Learn Go!" // String类型

    s2 := `A "raw" string literal
can include line breaks.` // 同样是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的别名

    // 数组类型编译的时候大小固定。
    var a4 [4] int              // 有4个int变量的数组,初始为0
    a3 := [...]int{
   3, 1, 5}     // 有3个int变量的数组,同时进行了初始化

    // Slice 可以动态的增删。Array和Slice各有千秋,但是使用slice的地方更多些。
    s3 := []int{
   4, 5, 9}        // 和a3相比,这里没有省略号
    s4 := make([]int, 4)        // 分配一个有4个int型变量的slice,全部被初始化为0

	// 常见操作
	str := "带加豪,偶稀渣渣辉"
	bs := []byte(str) // 字符串转化为byte切片
	str2 := string(bs) // byte切片转字符串
	println(str, len(str), bs, len(bs), str2, strings.Count(str, "")-1) // println函数更像 Java的 sysout
	fmt.Println(str, len(str), bs, len(bs), str2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值