我要开始学习Go语言了

我要开始学Golang了

开发环境的搭建

下载,到官网下载(下载地址可以是国内资源,go国内下载地址。)选择相应版本,点点点,指定bin地址,home and path环境变量会自动配置,在cmd执行 go versio可以查看是否正确下载。
下载成功显示
如上图显示,则go语言开发环境搭建完成。
当然,开发工具最好是不要用记事本,什么编辑器顺手用什么,我就用idea吧。

HelloWorld

package main

import(
"fmt"
)

func main(){
fmt.Println("hello world!")
}

运行结果

hello world!

定义变量

//初始声明的变量在未赋值的情况下,是有初始值的
func variable1(){
var i int
var s string
//fmt.Print(i, s)
//格式化输出方式
fmt.Printf("%d %q\n", i, s)//0 ""
}

go语言声明变量使用var关键字,并且对于声明未赋值变量都拥有一个默认的零值。让NullPointerException见鬼去吧。
当然,我们可以给变量赋初值

//为变量赋初始值
func variable2(){
var i int = 3
var s string = "Jefflikie"
fmt.Printf("%d %q\n", i, s)// 3 "Jefflikie"
}

//为多个变量赋初始值
func variable3(){
var i, j int = 3, 8
var s string = "Jefflikie"
fmt.Printf("%d %d %q\n", i, j, s)// 3 8 "Jefflikie"
}

//声明多个变量
func variable4(){
var i, j int
var s string = "Jefflikie"
fmt.Printf("%d %d %q\n", i, j, s)// 0 0 "Jefflikie"
}

func variable5(){
	var i int
	var s string
	// var 括号里声明可以自动类型识别
	var(
		a = 3
		b = 4.1
		c = '丁'
	)
	//fmt.Print(i, s)
	//格式化输出方式
	fmt.Printf("%d %q\n", i, s)//0 ""
	fmt.Printf("%d %f %c\n", a, b, c)//3 4.100000 丁
}

当然,我觉得这不够方便,go是和Python写起来一样很方便的语言,我们这里可以自动识别变量的类型。

//赋值时可不必加上变量的具体类型,go会自行判断
func variable5(){
var i, j = 3, 9
var s = "Jefflikie"
fmt.Println(i, j, s)// 3 9 "Jefflikie"
}

// 可以达到类似的赋值效果
func variable6(){
var i, j, k, l = 3, 9, true, "frank"
var s = "Jefflikie"
fmt.Println(i, j, s, k, l)// 3 9 Jefflikie true frank
}

我们最常使用的变量赋值方式还是

// 省去var关键字,:=的意思就是,定义并声明变量
func variable7(){
i, j, k, l := 3, 9, true, "frank"
// 既然:=是定义并赋值,那么我们后面再进行定义赋值就是重复定义了,所以会报错
//i := 5
i = 5
s := "Jefflikie"
fmt.Println(i, j, s, k, l)// 5 9 Jefflikie true frank
}
  1. 注意这种方式的变量定义只能用在func函数里,在包内,函数外的变量还是需要使用var关键字来定义变量;
  2. printf和println打印的区别,printf 是格式化打印;
// printf与println的区别
func variable8(){
	m, d := "jefflike", 100
	// 可以格式化打印
	fmt.Printf("name is %s and age is %d", m, d)
	// 可以换行
	fmt.Println("neme is ", m, "age is ", d)
}
  1. 匿名函数的使用
// 匿名变量的使用
func NoName() {
	// go语言定义的变量都要使用到,否则就会编译不通过
	a, _ := NBFunc()
	fmt.Printf("返回的有用的结果是%s", a)
}

// 假设这是一个第三方的API,会返回多个结果
func NBFunc() (string, string) {
	return "能用到的结果", "没啥卵用的结果"
}

内建变量

bool,string

string类型每种编程语言里都有,go语言的string类型与其他语言基本上使用也没什么差别,就不多说了,默认零值是空字符串。

func main() {
a := "我爱你北京"
fmt.Println(len(a))//15
}

bool类型在Python里是可以和0,1等价的,但是在Golang里,bool和0,1无法等价,只能代表真假默认零值是false。

float32, float64

go语言里没有double的类型,float32, float64作为浮点数类型
与其他语言一样,浮点型会丢失精度,float64类型比float32精确度高一些。

int

每一种int的类型都可以分为有无符号的整形,加u就是无符号整型
int8-64,规定了长度,int不规定长度,那么在32位系统的长度就是32位,64位系统为64位
uintptr(指针)
(u)int, int8, ingt16, int32, int64, uintptr

byte,rune

rune是go语言的字符型,但是不同于其它语言的char,rune长度是32位的(4个字节),其实在现在的全球化(汉字单个字utf8是三个字节(24位),Unicode都是两个字节(16位))
一个字符的char类型已经是一个坑了,所以rune更加好用。
byte就是一个字节长度的8位

complex64,complex128

complex64,complex128 很少见的把复数类型作为了内建的变量类型.
complex的类型是complex64与128,他的实部与虚部分别是32位和64位的float,float浮点型都是不够精准的.

强制类型转换

go语言里只有强制类型转换,没有隐式类型转换,如变量提升这种,所以类型需要显示的强制类型转换。但是一定要是可以互相转换的类型,才可以进行这样的数据型转换。像bool和int就不能够转换。

// 强制类型转换的小例子,勾股定理
func trianagle(){
	a, b := 3, 4
	var c int
	// math.Sqrt要求参数是一个浮点类型,但是我们的a与b都是整型,不能进行自动的类型转换
	//需要我们手动进行类型转换
	//同理我们math.Sqrt的结果也是浮点型,我们定义了int型的c接收就必须强制类型转换
	//c = int(math.Sqrt(a * a + b * b))
	c = int(math.Sqrt(float64(a * a + b * b)))
	fmt.Println(c)
}

Golang中scan的两种方式

// 键盘输入的两种方式
func input1 () {
	var a int // 声明变量a
	fmt.Println("请输入:")
	fmt.Scanf("%d", &a)
	fmt.Println("a is ", a)
}

func input2 () {
	var b int // 声明变量a
	fmt.Println("请输入:")
	fmt.Scan(&b)
	fmt.Println("b is ", b)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值