• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Golang语言基础第一部分 | 青训营

武飞扬头像
亢有悔
帮助4

Golang

Golang的优势

静态类型语言:编译的时候检查出来隐藏的大多数问题

语言层面的并发:

  • 天生的基因支持
  • 充分的利用多核

强大的标准库:

  • runtime系统调度机制
  • 高效的GC垃圾回收
  • 丰富的标准库

简单易学:

  • 25个关键字
  • C语言简洁基因,内嵌C语法支持
  • 面向对象特征(继承、多态、封装)
  • 跨平台

Golang 的应用场景

1、云计算基础设施领域:

代表项目:docker、kubernetes、etcd、consul、cloud flare CDN、七牛云存储 等。

2、基础后端软件:

代表项目:tidb、influxdb、 cockroach 等。

3、微服务

代表项目:go-kit、 micro、 monzo bank 的 typhon、bilibili 等。

4、互联网基础设施

代表项目:以太坊、hyperledger 等。

Golang 的不足

1、包管理,大部分包都托管在 Github 上。

托管在 Github 上的代码容易被作者个人操作影响到使用该项目的工程

2、无泛化类型。

后面版本可能会有

3、所有 Exception 都用 Error 来处理(有争议)。

4、对 C 的降级处理,并非无缝,没有 C 降级到 asm 那么完美。(序列化问题)

基础语法

package main

// 导多个包
import (
	"fmt"
	"time"
)

// Golang 有无 ; 都可,建议不加
func main() { // 函数的 { 必须和函数名同行, 否则编译报错
	fmt.Println("Hello Go!")
	time.Sleep(1 * time.Second)
}

变量的声明

输出变量类型的方法

var a int
fmt.Printf("type of a = %T\n", a)
// type of a = int

局部变量的声明:

// 方法一:声明一个变量 默认的值是0
var a int 

// 方法二:声明一个变量,初始化一个值
var b int = 100

// 方法三:初始化的时候, 省去数据类型,通过值自动匹配当前的变量的数据类型
var c = 100

// 方法四:(常用) 省去var关键字,直接自动匹配
d := 100

全局变量的声明:以上只有方法四不支持(编译会报错)

多变量的声明:

// 单行写法
var xx, yy int = 100, 200
var kk, ll = 100, "Aceld"

// 多行写法
var (
  vv int  = 100
  jj bool = true
)

常量与 iota

使用 const 定义常量,常量是只读的,不允许修改

const a int = 10

const (
	a = 10
  b = 20
)

const 可以用来定义枚举:

const {
  BEIJING = 0
  SHANGHAI = 1
  SHENZHEN = 3
}

const 可以和 iota 一起使用来定义有规则的枚举

const (
	// 可以在const() 添加一个关键字 iota, 每行的iota都会累加1, 第一行的iota的默认值是0
	BEIJING = iota	
	SHANGHAI 		
	SHENZHEN      	
)

const (
	a, b = iota 1, iota 2 
	c, d				  
	e, f				  

	g, h = iota * 2, iota *3  
	i, k					  
)

string

对于字符串操作的 4 个包:bytes、strings、strconv、unicode

  • bytes 包操作 []byte。因为字符串是只读的,因此逐步构创建字符串会导致很多分配和复制,使用bytes.Buffer 类型会更高。
  • strings 包提供 切割、索引、前缀、查找、替换 等功能。
  • strconv 包提供 布尔型、整型数、浮点数 和对应字符串的相互转换,还提供了双引号转义相关的转换。
  • unicode 包提供了 IsDigit、IsLetter、IsUpper、IsLower 等类似功能,用于给字符分类。

如果 string 中包含汉字,要注意:

  • UTF-8 编码中,一个汉字需要 3 个字节,通过 len() 获取的是字符串占据的字节数
str1 := "hello 世界"
fmt.Println(len(str1)) // 12
  • 如果想要得到字符串本身的长度,可以将 string 转为 rune 数组再计算:
str2 := "hello 世界"
fmt.Println(len([]rune(str2))) // 8

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhcbai
系列文章
更多 icon
同类精品
更多 icon
继续加载