golang-基础
1.go的特点
兼具动态语言的开发效率与C,C++,java的性能安全性 ,内置编译器
2.go的安装
go的sdk下载: https://studygolang.com/dl
go的IDE下载: https://www.jetbrains.com/go/
3.go run与go build
go run 编译后直接执行
go build 编译成二进制文件 ,源码文件会小于编译文件 ,编译文件包含了其他依赖
4.数据类型
数据类型是让编程语言,编译器,数据库,代码环境知道如何去操作处理数据的
强类型语言:错误的使用数据类型将会报错 ,数据类型变换需要强制转换(go,python)
弱类型语言:为了程序的执行,在运行时将一种数据类型转换为另一种(bash-shell ,js)
静态语言:编译执行性能高 ,编译器检查数据类型正确, 安全性与性能(go)
动态语言:快速的开发效率 ,可移植性和兼容性好 ,简单与开发速度(python)
5.go声明变量
显示声明:全局变量必须使用显示声明 ,也可用于函数中
简短声明:函数内变量多使用简短声明 ,不用于全局
6.go的内置基本数据类型
布尔类型 :在go中布尔值仅仅是 "true" 和 "false" ,任何零值都无法作为布尔值直接判断
数值类型 :整形带符号int和不带符号uint ,带符号是首位0,1用来表示符号有无 ,go中是用int会自动判断是int64还是int32
浮点型单精度双精度浮点数 ,float32和float64
字符串类型 :string
数组 :go的数组是类型和长度固定的
7.检查变量的类型
标准库的reflect包
package main import (
"fmt"
"reflect"
) func main() {
a :=
b:= ""
c := true
d := []string{"","",""}
fmt.Println(a,reflect.TypeOf(a))
fmt.Println(a,reflect.TypeOf(b))
fmt.Println(a,reflect.TypeOf(c))
fmt.Println(a,reflect.TypeOf(d))
}
8.数值类型转换
整数与浮点的转换
package main import (
"fmt"
"reflect"
) func main() {
i :=
n := 2.7
fmt.Println(i,reflect.TypeOf(i),n,reflect.TypeOf(n))
i1 := float64(i)
n1 := int(n)
fmt.Println(i1,reflect.TypeOf(i1),n1,reflect.TypeOf(n1))
}
浮点数的计算问题处理
浮点数存储在内存时 ,此方不能精准表示小数部分 使用第三方decimal包来解决
package main import (
"fmt"
"github.com/shopspring/decimal"
) func main() {
var m,n float64 = 14.1,13.5
//浮点数存储在内存,次方不能精准表示浮点数就会出现偏差 (除法乘法问题)
fmt.Println(m-n)
fmt.Println(m*n)
fmt.Println(m/n)
fmt.Println(m+n)
q1 := decimal.NewFromFloat(m).Sub(decimal.NewFromFloat(n))
q2 := decimal.NewFromFloat(m).Add(decimal.NewFromFloat(n))
q3 := decimal.NewFromFloat(m).Mul(decimal.NewFromFloat(n))
q4 := decimal.NewFromFloat(m).Div(decimal.NewFromFloat(n))
fmt.Println(q1,q2,q3,q4)
}
字符串与整型之间的转换 使用标准库的strconv包
字符串转整数可能会出现异常 ,根据go的错误处理机制 ,调用者需要接收错误处理 ,所以Atoi函数有两个返回值接收
package main import (
"fmt"
"reflect"
"strconv"
) func main() {
str1 := ""
int1 :=
fmt.Println(str1, reflect.TypeOf(str1), int1, reflect.TypeOf(int1))
str2, err := strconv.Atoi(str1)
fmt.Println(str2, reflect.TypeOf(str2), err) //str2是字符串被转换为整型
int2 :=strconv.Itoa(int1)
fmt.Println(int2, reflect.TypeOf(int2), err) //int2是整数被转为字符串
}
Parse类函数 :将string转换为其他类型(bool int float uint)
base: 转换为多少进制 basesize: 转化为多少位
返回的错误由" _ "黑盒子收走
package main import (
"fmt"
"reflect"
"strconv"
) func main() {
a, b, c, d := "true", "-12", "", "3.14"
a1, _ := strconv.ParseBool(a)
b1, _ := strconv.ParseFloat(d, ) //指定转为64或32类型
c1, _ := strconv.ParseInt(b, , ) //指定base:进制,basesize:64或43
d1, _ := strconv.ParseUint(c, , ) //指定base:进制,basesize:64或43
fmt.Println(reflect.TypeOf(a1), reflect.TypeOf(b1), reflect.TypeOf(c1), reflect.TypeOf(d1))
}
Format类函数 :将其他类型转换为string类型
base: 转换为多少进制 basesize :64
只能对int64 ,float64 ,uint64做转换 ,其中浮点转为字符串会格式化
package main import (
"fmt"
"reflect"
"strconv"
) func main() {
var (
a bool = true
b int64 = -
c uint64 =
d float64 = 3.14
)
a1 := strconv.FormatBool(a)
b1 := strconv.FormatInt(b, )
c1 := strconv.FormatUint(c, )
d1 := strconv.FormatFloat(d, 'E', -, )
fmt.Println(reflect.TypeOf(a1), reflect.TypeOf(b1), reflect.TypeOf(c1), reflect.TypeOf(d1), )
}
9.变量
变量由字母数字下划线组成 ,开头不能是数字
声明变量:关键字var声明 ,快速声明 ,简短声明
package main var StartNum int = //var声明
func main() {
var ( //快速声明
a string = "a"
b string = "b"
)
c,d,e:= ,, //简短声明 (只能在函数中使用)
//......
}
10.零值
变量声明不赋值 ,此时等于该类型的零值
不同数据类型零值不同: bool(false) ,int(0) ,float(0.0) ,string("") ,剩下的slice ,array ,map ,function ,interface ,pointer..都是nil
对于复合类型 ,go会对每个元素初始化为其零值
判断变量是否赋值 ,可以检查它是否等于该类型的零值!!!
11.常量
常量就是本次编译后无法在程序运行中改变的量
const StartTime int = 1970 #StartTime就是常量
12.变量的作用域
go中一个大括号 "{}" 就是一个块 ,在块内声明变量 ,该块内任意使用 (go的文件也是块 ,相当于声明全局变量)
对于嵌套块来说 ,内部块可以访问外部块变量 ,外部块无法访问内部块变量
13.指针
指针也是一种类型pointer ,用来存储变量内存地址
go语言中 ,如果直接赋值 ,或将变量传到函数 ,就会开辟内存复制副本
指针可以指向原有变量访问 ,而无需复制副本 ,指针引用会修改源值 ,值引用不会
创建指针 : prt := &变量 #其中&可以获得变量的内存地址
使用指针 : *ptr #获得指针指向的变量的值
package main
import "fmt"
func main() {
a := []int{}
a = append(a, , , , )
ptra := &a #创建指针存储a的内存
vala := a #创建a的副本
fmt.Printf("a内存地址为%p,ptra内存地址为%p,vala内存地址为%p", &a, &*ptra, &vala)
}
golang-基础的更多相关文章
- golang基础知识之encoding/json package
golang基础知识之json 简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.可以去json.org 查看json标准的清晰定义.json pack ...
- Golang基础之函数
golang基础之函数 1.为什么需要函数? 有些相同的代码可能出现多次,如果不进行封装,那么多次写入到程序中,会造成程序冗余,并且可读性降低 2.什么是函数 为完成某些特定功能的程序指令集合称为函数 ...
- GoLang基础数据类型--->字典(map)详解
GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...
- GoLang基础数据类型-切片(slice)详解
GoLang基础数据类型-切片(slice)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数组的长度在定义之后无法再次修改:数组是值类型,每次传递都将产生一份副本.显然这种数 ...
- GoLang基础数据类型--->数组(array)详解
GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...
- GoLang基础数据类型--->字符串处理大全
GoLang基础数据类型--->字符串处理大全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入: 高级运维工程师之路 59843264 ...
- 如何使用gitlab自建golang基础库
这里以go mod方式建立golang基础库 一.gitlab创建项目golib 地址为gitlab.xxx.com/base/golib 示例如下 go mod初始化命令 go mod init g ...
- Golang 基础之基础语法梳理 (三)
大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第三章节 Golang 基础之基础语法梳理 (一) Gol ...
- Golang 基础之基础语法梳理 (一)
大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第一章节 Golang 基础之基础语法梳理 (一) Gol ...
- Golang 基础之基础语法梳理 (二)
大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第二章节 Golang 基础之基础语法梳理 (一) Gol ...
随机推荐
- JVM CPU Profiler技术原理及源码深度解析
研发人员在遇到线上报警或需要优化系统性能时,常常需要分析程序运行行为和性能瓶颈.Profiling技术是一种在应用运行时收集程序相关信息的动态分析手段,常用的JVM Profiler可以从多个方面对程 ...
- 【GZOI 2019】特技飞行
Problem Description 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代表着水平位置,纵坐标代表着飞行高度. ...
- C# get md5,renamed file and can not change file's md5
using System; using System.Text; using System.IO; using System.Security.Cryptography; namespace Cons ...
- Wiki语法大全
原文链接:wiki语法大全 编辑一个维客页面十分容易.只要点击页面上方的“编辑本页”或右侧的[编辑]链接即可修改该页,或点击“讨论本页”然后再点击“编辑页面”来讨论该页面.点击后您就会看到一个包含那 ...
- PHP7.3安装event扩展
安装支持库libevent wget https://github.com/libevent/libevent/releases/download/release-2.1.11-stable/libe ...
- C/C++ 项目编译工具简介
本文基于一个需要对 C 语言家族项目进行编译.生成解决方案的开发者的视角,对编译过程中所需要的各个工具进行简要的名词解释. GCC | LLVM 提供编译器 <-- GNU Make 根据配置文 ...
- js实现常见排序算法
电脑配置 CPU:AMD X4 640 内存: 宏想 DDR3 1600MHz 8g 主板:华擎 980DE3/U3S3 R2.0 浏览器:chrome 79.0.3945.88(正式版本) (64 ...
- Python第一个程序Hello Word
[源代码] print('Hello Python World!') [过程] 打开命令提示窗口(cmd),在源程序所在路径下执行,python 文件名.py. [截图]
- eCharts二三维地图总结
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 最近多个项目中的登录页面陆续提出了不少地图需求,主要围绕地图的 ...
- Hyper-V “SP2019SER”无法更改状态。操作失败,错误代码为“32788”。
卸载Hyper-V,然后重装,再重启已有的Hyper-V服务器,报错如下: 尝试启动选定的虚拟机时出错.“SP2019SER”无法更改状态. 原因:卸载后导致虚拟网卡出现问题导致的. 解决办法: 右击 ...