GO 语言细节


命名
需要对外暴露的名字必须以大写字母开头 不需要对外暴露的名字用小写 并且GO语言拥护骆驼命名法 排斥下划线命名法
Java和C# 官方推荐骆驼法的 C语言主要使用下划线命名法
格式化代码
go fmt hello.go
编译器会调整语句位置 花括号位置 以制表符缩进代码 添加必要的空格
go语言导库
go语言 导入GitHub中的包
在go build 之前go get github.com/yyy/xxx  完成安装
单引号 双引号
go语法 双引号是常用的来表达字符串 如果使用了单引号 编译器会提示出错
invalid character literal (more than one character)
单引号只能包含一个字符 例如’a’ ,程序会输出97表示字符a的ascii码
非要用单引号输出必须使用string函数转换
fmt.Println(string('a') )
Printf 和 Println 的区别
printf 输出后不换行  println输出后自动换行;
printf格式化输出 println 直接输出内容
导包和定义变量
golang 倒入的包和定义的变量都必须被引用
否则编译器会报错
赋值时的下划线
_, b = 5, 7
上面的语句 5这个值被丢弃
golang 一个值被赋予下划线表示被丢弃
golang中字符串
字符串类型在 go 里是个结构
包含指向底层数组的指针和长度
这两部分每部分都是 8 个字节
所以字符串类型大小为 16 个字节
go语言缩进
go语言默认缩紧为tab
不同于python 后者推荐使用空格
编译部署
go是编译型语言
可以在一个平台上编译多个平台的版本 称之为交叉编译
go语言语法细节与基本数据类型
package main
import "fmt"
func test1(){
var a int
var s string
}//go语言 变量被申明 必须 赋初值 a这个时候是0 s是空串""
//变量被申明 一定要被引用 不然就不能通过编译
fmt.Println(a,s) //打印不出来s的值 s是空串
fmt.Printf("%d,,,,,%q",a,s) //%q 会打印出字符串的引号
var b, c int = 1, 2
var str string = "string"
fmt.Println(b,c,str) //如上 变量赋值方式
var  d, e  = 1, 2;
var string = "string value"
fmt.Println(d,e,string)//关键字  可以省略 可以通过后面的类型自动判断数据类型
var m,n,o,p,q = 1,2,"str",true,3.14
fmt.Println(m,n,o,p,q)//一次定义中有各种的类型 也是支持的
//变量的定义 可以省略var
aa, bb, cc,  dd, ee := 1,2,"str",true,3.14 //加个冒号
bb = 1 //这是对已经声明的变量重新复制不能有冒号
fmt.Println(aa,bb,cc,dd,ee)
}
//函数外面 进行全局变量的定义
var theaa = 1
var thess = "str"
//thebb := 1   这种写法是错的 这种变量不能这样写 错了。
//go语言没有全局变量额说法 都是以包内部这种
//作用域只是包内部
//为了不写很多var
var(//注意是括号
vi, vb= 1, 3
va = "a"
)//这里的一群变量 支持函数内部
var vvi, vva = 1, "aa";//基本规则没有问题
func main() {
fmt.Print("hello world")
test1()
fmt.Println(vi,vb,va,vvi,vva,theaa,thess) //全局的引用
}
//go语言数据类型
package main
import (
"fmt"
"math/cmplx"
"math"
)
//go语言 内建变量类型  就是语言内置类型  是基本数据类型
//bool, string
//(u)int,(u)int8,(u)int16,(u)int32,(u)int64,uintptr(加了u就是无符号的意思)
//byte,rune( 是c java中的char 字符型 为了应对多国语言的一个字符 采用rune 是4个字节的)
//float32  float64  complex64  complex128
// complex是复数 有实部与虚部 可以表示一个二维平面的数(数学之美) float是浮点数 明确说出了他的位数
//复数的知识    3 + 4i  ->  这就表示了一个点 长度是5
// e ^ (a*i)= cos a + i sin a --> 表示一个圆 a是一个角度    这个公式会是高等数学里面的泰勒基数展开
// 上面的这个圆的长度都为1 而且e^(a * i)也是周期函数
// e(i * pi) + 1 = 0 这是欧拉公式
func main() {
c := 3 + 4i  // 这个4i必须连着写 中间不能有乘号什么的。
a := cmplx.Abs(c) //计算长度
fmt.Println(c)  //(3+4i)
fmt.Println(a)  //5//fmt.Println("这个复数的长度为" + a)         // java的这种写法不对了吗?
//这里来一个欧拉公式
oula()//go语言的类型转换 go语言不存在隐式类型转换 全是强制转换
var aaa, bbb int = 1 ,2
var ccc int
ccc = int(math.Sqrt(float64(aaa * aaa + bbb * bbb))) //强制转换
fmt.Println(ccc)//强制转换的时候 浮点数表示并不准确 那么4.999999999999 本来浮点是5 但是取整结果却是4
}
func oula(){
fmt.Println(cmplx.Pow(math.E,1i * math.Pi) + 1) //(0+1.2246467991473515e-16i)
fmt.Println(math.Exp(1i * math.Pi) + 1) //与上面一样
//这里不是0 虚部是一个很小的浮点数 所以结果只是接近0 负数的实部虚部都是两个等长的浮点型数据 结果与python一样
}
//每一个go语言文件  文件上面 package main  文件内部的main函数才会作为入口可以执行