1.程序的基本框架
package main
import "fmt"
func main(){
fmt.Print("hello world")
}
注:fmt.Println可以自动换行
println和print支持变量print(arr)其中arr为变量
当标识符为大写字母开头时,可以被客户端使用,但是前提是导入这个包
当标识符为小写字母开头时,对外不可见但是对包内可见
执行代码打开命令行应用 go run
2.基本语法
语句之间不需要用;来表示语句的结束,使用换行即可
当多个语句在同一行时也可以使用;来分隔句子
标识符不可_下划线开头,字符不可以用运算符,字符连接用+
fmt.Println("Google" + "Runoob")
格式化字符
用fmt.Sprintf赋值
package main
import (
"fmt"
)
func main() {
// %d 表示整型数字,%s 表示字符串
var stockcode=123
var enddate="2020-12-31"
var url="Code=%d&endDate=%s"
var target_url=fmt.Sprintf(url,stockcode,enddate)
fmt.Println(target_url)
}
3.字符类型
有符号int无符号uint后跟数字表示长度
float和complex分别表示 浮点数 和 实数+虚数
uintptr存一个指针
4.语言变量!!
var identifier type 声明变量
1.未声明的变量会被系统赋予初始值
bool的零值为false
2.也可以在定义变量的时候直接赋值不用声明数据类型
var a = 1;则直接给a为int 类型且赋值为1
- %v 只输出所有的值
- %+v 先输出字段类型,再输出该字段的值
- %#v 先输出结构体名字值,再输出结构体(字段类型+字段的值)
声明两次时系统编译错误
var intVal int intVal :=1 // 这时候会产生编译错误,因为 intVal 已经声明,不需要重新声 //:=声明变量
正确赋值方式 var intVal int intVal =1
3.赋值
a:=可以直接赋值,等效于var a int /n a =
可以同时定义类型相同的多个变量var a,b,c int
//类型相同多个变量, 非全局变量 var vname1, vname2, vname3 type vname1, vname2, vname3 = v1, v2, v3 var vname1, vname2, vname3 = v1, v2, v3 // 和 python 很像,不需要显示声明类型,自动推断 vname1, vname2, vname3 := v1, v2, v3 // 出现在 := 左侧的变量不应该是已经被声明过的,否则会导致编译错误
使用变量需定义,局部变量定义必须使用但是全局变量未必,可以定义且储存不使用
5.定义常量iota
const identifier [type] = value
- 显式类型定义:
const b string = "abc"
- 隐式类型定义:
const b = "abc
i=a<<n表示在左移
注:<<n==*(2^n)
- i=1:左移 0 位,不变仍为 1。
- j=3:左移 1 位,变为二进制 110,即 6。
- k=3:左移 2 位,变为二进制 1100,即 12。
- l=3:左移 3 位,变为二进制 11000,即 24。
在const中每出现一次常量iota的值自动加一
6.运算符
算数符与关系符与逻辑符与c无异u不做过多赘述;
关于位运算符
与就是都有1时取1 或就是有1时取1 异就是相异取1
运算结果会自动转化为十进制,但是运算过程使用二进制并且不会超过八位
6.语言条件语句
IF IF~ELSE SWITCH与c无异不做赘述
select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。 |
#select语句
7.循环
for 条件 {}
for i=x;i<=N;i++ {}
goto相当于return
例:用for循环寻找1-100的素数
func t01_test2() {
const RANGE = 100
for num := 2; num <= RANGE; num++ {
// 当前因数 factor 对应的另一个因数就是 num / factor。
// 当前者大于后者时,可以认为所有因数已经分析完毕。
for factor := 2; factor <= (num / factor); factor++ {
//能除尽,则表示 factor 是 num 的一个因子。那么num就不是素数。
if num%factor == 0 {
goto NEXT_NUM
}
}
fmt.Printf("%d\t是素数\n", num)
NEXT_NUM:
}
}